Активный токен доступа должен использоваться для запроса информации об ошибке текущего пользователя при публикации видео на Facebook.

Это мой код для публикации видео на facebook:

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

NSArray * p = [NSArray arrayWithObjects:@"email",@"basic_info", nil];

NSDictionary * dict=[NSDictionary dictionaryWithObjectsAndKeys:@"xxx",ACFacebookAppIdKey,p,ACFacebookPermissionsKey,ACFacebookAudienceEveryone,ACFacebookAudienceKey, nil];

NSDictionary *options = @{
                          ACFacebookAppIdKey: @"xxx",
                          ACFacebookPermissionsKey: @[@"publish_actions",@"publish_stream, " ],
                          ACFacebookAudienceKey: ACFacebookAudienceFriends,
                          };
ACAccountType *facebookAccountType = [accountStore
                                      accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

[accountStore requestAccessToAccountsWithType:facebookAccountType options:dict completion:^(BOOL granted, NSError *error) {
    NSLog(@"blablalba");
    //do nothing here.
    if (granted) {
        [accountStore requestAccessToAccountsWithType:facebookAccountType options:options completion:^(BOOL granted, NSError *error) {
            if (granted) {
                NSLog(@"posting to fb..");


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

                NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
                NSURL *videoPathURL = [defaults URLForKey:@"vidURL"];

                //        NSURL *videoPathURL = [[NSURL alloc]initFileURLWithPath:videoPath isDirectory:NO];
                //        NSData *videoData = [NSData dataWithContentsOfFile:videoPath];
                NSData *videoData = [NSData dataWithContentsOfFile:[videoPathURL path]];

                NSString *status = @"One step closer.";
                NSDictionary *params = @{@"title":status, @"description":status};

                SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                                        requestMethod:SLRequestMethodPOST
                                                                  URL:url
                                                           parameters:params];

                [request addMultipartData:videoData
                                 withName:@"source"
                                     type:@"video/quicktime"
                                 filename:[videoPathURL absoluteString]];

                [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
                    if (error) {
                        NSLog(@"error: %@", error);
                    }
                    NSLog(@"httpresponse: %@", urlResponse);
                }];
            }
        }];
    }

}];

Но его возвращение:

"OAuth \"Платформа Facebook\" \"invalid_request\" \"Для запроса информации о текущем пользователе необходимо использовать токен активного доступа.\"";

Я понятия не имею, что мне не хватает. Любая помощь?


person resting    schedule 10.02.2014    source источник


Ответы (2)


Вы забыли установить учетную запись facebook для запроса. Когда вам будет предоставлен доступ, получите учетную запись:

                           NSArray *accounts = [self.accountStore
                                accountsWithAccountType:fbAccountType];
                        self.facebookAccount = [accounts lastObject];

и после создания запроса установить учетную запись

    [request setAccount:self.facebookAccount];
person dwbrito    schedule 05.11.2014

Обнаружил, что мне пришлось добавить токен в поле params:

NSString *status = @"One step closer.";
NSDictionary *params = @{@"title":status, @"description":status, @"access_token":accessToken};

Надеюсь, это поможет другим.

person resting    schedule 10.02.2014