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

前端之家收集整理的这篇文章主要介绍了ios6 – FaceBook SDK3.5 closeAndClearTokenInformation调用openActiveSessionWithReadPermissions的完成处理程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下代码,我在facebook登录时使用.
  1. - (BOOL)openFBSessionWithAllowLoginUI:(BOOL)allowLoginUI
  2. withCompletionHandler:(void (^)())completionHandler
  3. {
  4.  
  5. NSArray *permissions = [NSArray arrayWithObjects:
  6. @"user_photos",@"email",nil];
  7. return [FBSession openActiveSessionWithReadPermissions:permissions allowLoginUI:allowLoginUI completionHandler:^(FBSession *session,FBSessionState state,NSError *error) {
  8. if (error != nil) {
  9. ...
  10. } else {
  11. switch (state) {
  12. case FBSessionStateOpen:
  13. {
  14. ...
  15. }
  16. case FBSessionStateClosed:
  17. {
  18. ...
  19. }
  20. case FBSessionStateClosedLoginFailed:
  21. {
  22. ...
  23. }
  24. default:
  25. break;
  26. }
  27. }
  28. }];
  29. }

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

  1. [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相关文章