我一直关注Facebook的指南并试图通过我的iOS应用程序更新状态。在尝试将我的状态更新到我的时间线时,我检查了我是否拥有发布权限,并且如果以下代码不存在则请求它:
GraphViewController.m中的代码:
- (IBAction)postClicked:(id)sender {
if([self.status_input isFirstResponder])
[self.status_input resignFirstResponder];
if ([FBSession.activeSession.permissions
indexOfObject:@"publish_actions"] == NSNotFound) {
// No permissions found in session, ask for it
NSLog(@"No permission");
[FBSession.activeSession
requestNewPublishPermissions:
[NSArray arrayWithObject:@"publish_actions"]
defaultAudience:FBSessionDefaultAudienceFriends
completionHandler:^(FBSession *session, NSError *error) {
if (!error) {
// If permissions granted, publish the story
[self postStatusWithGraphAPI];
}
}];
} else {
// If permissions present, publish the story
[self postStatusWithGraphAPI];
}
}
方法postStatusWithGraphAPI:
- (void) postStatusWithGraphAPI{
[FBRequestConnection startForPostStatusUpdate:@"User-generated status update."
completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
if (!error) {
// Status update posted successfully to Facebook
NSLog(@"result: %@", result);
} else {
// An error occurred, we need to handle the error
// See: https://developers.facebook.com/docs/ios/errors
NSLog(@"%@", error.description);
}
}];
}
此视图控制器不处理应用程序的facebook登录,该登录在另一个视图控制器(即MyViewController)中处理。简洁地说,流程就像:
在我按下更新状态按钮后,由于我没有发布权限,应用程序应该让我向该应用授予额外权限。但是,要求获得其他权限,而是发出“您已经授权此应用程序”消息,并显示“确定”和“取消”选项。
在我按下“确定”后,我仍然没有发布权限,因此无法发布状态,发生以下错误消息:
2014-06-12 19:11:18.545 TestingApp [4130:60b] FBSDKLog:现有的状态更改处理程序已分配给会话并将被覆盖。
2014-06-12 19:11:18.548 TestingApp [4130:60b]会议开幕
2014-06-12 19:11:20.822 TestingApp [4130:60b]未经许可 2014-06-12 19:11:23.186 TestingApp [4130:60b] FBSDKLog:现有的状态更改处理程序已分配给会话并将被覆盖。
2014-06-12 19:11:23.640 TestingApp [4130:60b] Error Domain = com.facebook.sdk Code = 5“无法完成操作。(com.facebook.sdk error 5.)” UserInfo = 0x8c56320
{com.facebook.sdk:HTTPStatusCode = 403,com.facebook.sdk:ParsedJSONResponseKey = { body = { error = { 代码= 200; message =“(#200)用户尚未授权应用程序执行此>动作”; type = OAuthException; }; }; code = 403;
},com.facebook.sdk:ErrorSessionKey =, expirationDate:2014-08-11 11:11:19 +0000,refreshDate:2014-06-12 11:11:23 +0000, attemptsRefreshDate:0001-12-30 00:00:00 +0000,权限:( 安装, “public_profile” 电子邮件, “user_friends” )>}