3

以下のコードは、fbloginview がクリックされたときにユーザーの読み取り権限を許可した後、公開権限を再承認しようとしていました。

#pragma mark FBLoginViewDelegate Method
- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id<FBGraphUser>)user {
    NSLog(@"User info fetched %@ %@", user.name, user.id);

    [Global FBUser:user.first_name lastname:user.last_name fid:user.id];

    if ([[FBSession activeSession] isOpen])
    {
        //[[FBSession activeSession] closeAndClearTokenInformation];

        [[FBSession activeSession] reauthorizeWithPublishPermissions:[[[NSArray alloc] initWithObjects:@"publish_stream", nil] autorelease]
         defaultAudience:FBSessionDefaultAudienceEveryone
         completionHandler:^(FBSession* session, NSError* error)
         {
             if ([delegate respondsToSelector:@selector(SignUpAlertViewWasDone:)])
                 [delegate SignUpAlertViewWasDone:self];

             [self removeFromSuperview];
         }
         ];
    }

ここでこのエラーが発生しました:

例外 'com.facebook.sdk:InvalidOperationException'、理由: 'FBSession: 以前の再承認呼び出しがまだ完了していないため、再承認することはできません。'

前回の再認証呼び出しがいつ完了したかを検出できる機能はありますか?

openWithPublishPermission を使用してみましたが、うまくいきません。

4

1 に答える 1

5

非同期で呼び出してみてください

- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id<FBGraphUser>)user {

    if ([[FBSession activeSession] isOpen])
    {
        dispatch_async(dispatch_get_current_queue(), ^{
            [[FBSession activeSession] reauthorizeWithPublishPermissions:[[[NSArray alloc] initWithObjects:@"publish_stream", nil] autorelease]
                                                         defaultAudience:FBSessionDefaultAudienceEveryone
                                                       completionHandler:^(FBSession* session, NSError* error)
             {
                 if ([delegate respondsToSelector:@selector(SignUpAlertViewWasDone:)])
                     [delegate SignUpAlertViewWasDone:self];

                 [self removeFromSuperview];
             }];
         };
    }
}
于 2013-03-05T01:26:20.817 に答える