Загрузка видео на Facebook с iOS - не удалось запросить разрешение на вход в систему от пользователя, код ошибки 6

Я использую социальную среду в iOS 6, чтобы интегрировать загрузку видео с Facebook в свое приложение. Однако при запуске программы ничего не происходит, и вместо этого я получаю следующие ошибки:

Операция не может быть завершена. (ошибка com.apple.accounts 6.)

"Активный токен доступа должен использоваться для запроса информации о текущем пользователе.", "Type":"OAuthException","code":2500}}"

Ниже приведен мой код, первую половину которого я реализовал из этого урока. granted установлен в false, вызывая первую ошибку.

- (void)uploadToFb {

    ACAccountStore *accountStore = [[ACAccountStore alloc] init];

    ACAccountType *facebookAccountType = [accountStore
                                          accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

    // Specify App ID and permissions
    NSDictionary *options = @{
                               ACFacebookAppIdKey: @"2************",
                               ACFacebookPermissionsKey: @[@"publish_stream", @"publish_actions"],
                               ACFacebookAudienceKey: ACFacebookAudienceFriends
    };

    [accountStore requestAccessToAccountsWithType:facebookAccountType
                                          options:options completion:^(BOOL granted, NSError *e) {

          if (granted) 
          {
              NSArray *accounts = [accountStore accountsWithAccountType:facebookAccountType];
              facebookAccount = [accounts lastObject];
          }
          else
          { 
           NSLog(@"Error %@", e.localizedDescription);                                              }

          }
    }];

    NSURL *videourl = [NSURL URLWithString:@"https://graph.facebook.com/me/videos"];

    NSString *filePath = [outputURL path];
    NSURL *pathURL = outputURL;
    NSData *videoData = [NSData dataWithContentsOfFile:filePath];

    NSDictionary *params = @{
    @"title": @"Face Puppets Video",
    @"description": @"A funny video I made with the #FacePuppets iOS app."
    };

    SLRequest *uploadRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                                  requestMethod:SLRequestMethodPOST
                                                            URL:videourl
                                                     parameters:params];
    [uploadRequest addMultipartData:videoData
                           withName:@"source"
                               type:@"video/quicktime"
                           filename:[pathURL absoluteString]];

    uploadRequest.account = facebookAccount;

    [uploadRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
        NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
        if(error){
            NSLog(@"Error %@", error.localizedDescription);
        }else
            NSLog(@"%@", responseString);
    }];
}

3 ответа

Решение

Привет! Это очень хороший пример совместного использования iOS (Wiki) (Пример проекта для iOS, ~3 МБ). С его помощью вы можете поделиться видео в Facebook, YouTube, Flicker, Vimeo. Посмотрите ссылку выше и протестируйте этот пример.

Вам нужно установить вас AppId в к ESSViewController.m класс в этом методе:

- (IBAction)facebook:(id)sender
{
    self.fb = [[[ESSFacebook alloc] initWithDelegate:self
                                               appID:@"youAppID"
                                           appSecret:@"secret"] autorelease];
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"IMG_1203" withExtension:@"MOV"];
    [self.fb uploadVideoAtURL:url];
}

Может быть, это старая любовь Facebook, но для получения идеи о том, как обрабатывать для обмена видео из нашего приложения.

Весь ваш код после NSURL *videourl следует перенести на другой метод. В настоящее время он выполняется, пока requestAccessToAccountsWithType: запрос выполняется, поэтому facebookAccount ссылка еще не доступна. Итак, новый метод, который вы создаете и перемещаете в этот код, должен вызываться из completion заблокировать, если granted правда.

Обратите внимание, что вы не можете сразу же запросить разрешение на публикацию. Сначала вы должны запросить разрешения на чтение, а затем, как только оно будет предоставлено, запросить разрешения на публикацию.

Проблема, кажется, с вашим созданием NSDictionary.

   NSDictionary *options = @{
                           ACFacebookAppIdKey: @"2************",
                           ACFacebookPermissionsKey: @[@"publish_stream", @"publish_actions"],
                           ACFacebookAudienceKey: ACFacebookAudienceFriends
   };

вы видите, что сначала вы передаете ключи, а потом объекты, где NSDictionary вызывает +dictionaryWithObjectsAndKeys в этом случае...

попробуйте использовать правильный формат, например:

NSDictionary *options = [[NSDictionary alloc] initWithObjectsAndKeys:
                         @"###############", ACFacebookAppIdKey, 
                         [NSArray arrayWithObject:@"publish_stream"], ACFacebookPermissionsKey, 
                         nil];

это должно работать.

см. тот же вопрос здесь: Получение "кода ошибки 8" при вызове [ACAccountStore requestAccessToAccountsWithType] - iOS Facebook

Другие вопросы по тегам