重要提示:对于较旧版本的Facebook SDK(例如3.9.0),这似乎是正确的。在3.15.0中,它不再以这种方式工作。正如RaphaëlAgneau在回答中所说,你应该使用[session.permissions]
。
您必须使用以下方法,因为[FBSession activeSession].permissions
似乎会返回您请求的权限,而不是真正的权限。
[FBRequestConnection startWithGraphPath:@"/me/permissions"
completionHandler:^(FBRequestConnection *c, id result, NSError *error) {
if (!error) {
NSDictionary *permissions= [(NSArray *)[result data] objectAtIndex:0];
if (![permissions objectForKey:@"publish_actions"]) {
// Ok, continue with your logic
} else {
// Permission not found, maybe request it (see below)
}
} else {
// Treat error
}
}];
这里看到更多的信息:
https://developers.facebook.com/docs/facebook-login/ios/v2.0#permissions-checking
如果没有找到许可,你可能想通过这种方式提出要求:
[session requestNewPublishPermissions:PERMISSIONS_YOU_WANT
defaultAudience:FBSessionDefaultAudienceFriends
completionHandler:^(FBSession* session, NSError* error) {
// Try again the /me/permissions above
}];
'[FBSession activeSession]。权限“将返回您请求的权限,而不是活动权限。或者至少这是我所看到的。请参阅下面的答案。你需要'[FBRequestConnection startWithGraphPath:@“/ me/permissions”completionHandler:...]'。 – 2014-07-02 19:50:51
我现在无法测试,但文档中另有说明:“在身份验证流程中授予访问令牌的权限。” https://developers.facebook.com/docs/reference/ios/current/class/FBSession/ – 2014-07-04 15:31:17
今天我将我的Facebook SDK pod从3.9.0更新到3.15.1,现在'[FBSession activeSession] .permissions'返回正确的权限和'[FBRequestConnection startWithGraphPath:@“/ me/permissions”completionHandler:...]'不再返回它们(现在它返回{status:granted,permission:installed})。 – 2014-07-07 11:48:59