Shi*_*mar 10 facebook-login facebook-ios-sdk ios6
我在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;
}
}
}];
}
Run Code Online (Sandbox Code Playgroud)
以上工作正常登录.但是,当我使用以下代码注销时
[FBSession.activeSession closeAndClearTokenInformation];
Run Code Online (Sandbox Code Playgroud)
这再次调用openActiveSessionWithReadPermissions的completionHandler:权限allowLoginUI:.这对我来说没有意义.我不认为这是正确的行为.有没有人见过这个问题?我们如何退出?我在iOS6上使用SDK 3.5.
根据Facebook Developer bug tracker 上的这个帖子,这种行为是“设计使然”。
事实上,我确实建议此方法的更好名称是:openActiveSessionWithReadPermissions:allowLoginUI:stateChangeHandler:
因为这更准确地描述了正在发生的事情(实际上在状态更改时调用“completionHandler”)。
您可以通过多种方式处理此问题:Ben Cohen建议您可以在完成块中设置 to completionHandler(以确保运行一次),此答案建议创建一个运行一次处理程序,或者您可以打开状态更改。nilFBSessionStateHandler
理想情况下,由于我们依赖 Facebook SDK 来实现特定目的(登录、注销、发出请求等),这些将通过委托提供,但由于 SDK 开发人员显然对“哦块!”有点得意忘形了! ”,您必须在首次打开会话时定义状态更改处理程序。
| 归档时间: |
|
| 查看次数: |
901 次 |
| 最近记录: |