ios6 – FaceBook SDK3.5 closeAndClearTokenInformation调用openActiveSessionWithReadPermissions的完成处理程序

前端之家收集整理的这篇文章主要介绍了ios6 – FaceBook SDK3.5 closeAndClearTokenInformation调用openActiveSessionWithReadPermissions的完成处理程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下代码,我在facebook登录时使用.
- (BOOL)openFBSessionWithAllowLoginUI:(BOOL)allowLoginUI
            withCompletionHandler:(void (^)())completionHandler
{

    NSArray *permissions = [NSArray arrayWithObjects:
                        @"user_photos",@"email",nil];
    return [FBSession openActiveSessionWithReadPermissions:permissions allowLoginUI:allowLoginUI completionHandler:^(FBSession *session,FBSessionState state,NSError *error) {
       if (error != nil) {
        ...
       } else {
            switch (state) {
               case FBSessionStateOpen:
               {
                   ...
               }
               case FBSessionStateClosed:
               {
                   ...
               }
               case FBSessionStateClosedLoginFailed:
               {
                   ...
               }
               default:
                   break;
           }
       }
   }];
}

以上工作正常登录.但是,当我使用以下代码注销时

[FBSession.activeSession closeAndClearTokenInformation];

这再次调用openActiveSessionWithReadPermissions的completionHandler:permission allowLoginUI :.这对我来说没有意义.我不认为这是正确的行为.有没有人看到这个问题?我们如何退出?我在iOS6上使用SDK 3.5.

解决方法

根据 this thread在Facebook开发者bug追踪器,这种行为是“设计”.

其实我建议一个更好的名字这个方法将是:openActiveSessionWithReadPermissions:allowLoginUI:stateChangeHandler:

因为这更准确地描述了发生了什么(“完成亨德勒”实际上是呼吁国家改变).

您可以通过以下几种方式处理此问题:Ben Cohen建议您可以在完成块中将completionHandler设置为nil(以确保运行一次),this answer建议创建一个FBSessionStateHandler运行一次处理程序,也可以打开状态更改.

理想情况下,由于我们依赖于特定用途的Facebook SDK(登录,注销,发出请求等),这些将通过代表提供,但由于SDK开发人员显然已经被“ooh块! “,您不得不在首次打开会话的时候定义您的状态更改处理程序.

猜你在找的iOS相关文章