2013-03-04 90 views
3

下面的代碼在單擊fbloginview時允許用戶的讀取權限後嘗試重新授予發佈權限。Facebook SDK:用於發佈流的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,但它不起作用。

回答

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]; 
      }]; 
     }; 
    } 
} 
+0

它似乎工作。你能否解釋爲什麼 – LittleFunny 2013-03-05 10:54:23

+1

'FBSession:在前一次重新授權調用還沒有完成時重新授權是無效的。'你可以在prev reauthorize塊中調用另一個重新授權調用(因此prev調用應該在塊完成後完成),我認爲這是原因, – adali 2013-03-05 12:26:46

+0

問題是沒有辦法知道它何時完成。 – LittleFunny 2013-03-06 08:36:43