我正在尝试使用 iOS 上的 Facebook SDK 从用户那里获得发帖权限。
我在一个方法中调用下面的代码,如果应用程序没有发布到用户 facebook 墙上所需的发布权限,则会调用该方法。
// No permissions found in session, ask for it
[FBSession.activeSession requestNewPublishPermissions: [NSArray arrayWithObject:@"publish_actions"]
defaultAudience: FBSessionDefaultAudienceEveryone
completionHandler: ^(FBSession *session, NSError *error)
{
if( !error )
{
// Do something
}
}];
我第一次调用此代码时,它会将用户带到权限页面,甚至在它切换到设备上的 safari 之前,该 block 就会被调用并返回此错误消息
Error Domain=com.facebook.sdk Code=2 "The operation couldn’t be completed. (com.facebook.sdk error 2.)" UserInfo=0xc426410 {com.facebook.sdk:ErrorLoginFailedReason=com.facebook.sdk:ErrorReauthorizeFailedReasonUserCancelled,
然后应用程序继续在 safari 中显示权限页面,用户在其中选择确定。然后它返回到应用程序。即使向用户显示了权限页面并接受了权限,此时也未设置权限。
当尝试第二次发布时,它会将用户带到 safari 中的权限页面,并且 requestNewPublishPermissions 方法不会立即失败。用户选择确定,然后一切都按预期进行。
所以只有在第一次调用 requestNewPublishPermissions 时,它才会立即返回错误 ErrorReauthorizeFailedReasonUserCancelled。
这发生在模拟器和设备上。
知道是什么原因造成的吗?
最佳答案
我在这个问题的答案Facebook iOS 3.1 sdk login with publish permission callbacks上找到了这个问题的解决方案
dispatch_async(dispatch_get_current_queue(), ^{
[self openSessionForPublishPermissions];
});
其中 opensessionforpublishpermissions 是包含 requestNewPublishPermissions 方法的方法。
“原因是调用 reauthorize.. 需要在调用 openActiveSession.. 的事件循环之后。”
我认为这是 Facebook SDK 中的一个错误,将其视为正常行为是没有意义的,而且我还没有看到任何 Facebook 文档评论这是预期的行为。
关于ios - FBSession requestNewPublishPermissions 在响应之前失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16959938/