2013-04-03 65 views
2

我试图检查用户是否已经授予发布权限。如果他没有在那之前授予的权限我通过浏览他的权限屏幕:requestNewPublishPermissionsiOS Facebook SDK 3.2通过图路径请求检查权限

-(void)checkPermissions 
    { 
     // Get the most recent status 
     [FBRequestConnection 
     startWithGraphPath:@"me/permissions" 
     completionHandler:^(FBRequestConnection *connection, 
          id result, 
          NSError *error) { 
      if (!error) { 
        //This Condition Never Executed 

       if([[result objectForKey:@"data"] objectForKey:@"publish_actions"]) 
       { 
        //permissions exist 
       } 
       else 
       { 
        [self openSessionForPublishPermissions]; 
       } 
       NSString *permission = [[result objectForKey:@"data"] objectForKey:@"publish_actions"]; 

       NSLog(@"permissions data = %@",data); 
      } 
      else 
      { 
       NSLog(@"error"); //Control goes to this block 
      } 
     }]; 

    } 

在上面的代码,如果块永远不会执行,它总是返回错误

凡(错误!)我错了?我错过了什么吗?

+1

也许你已经解决了这个问题,但为了以防万一...为了理解错在哪里,需要分析返回的错误。 'NSLog(@“error”)'不提供信息。这个代码'NSLog(@“%@”,error)'会给你更多关于错误的信息。 –

回答

2

您可以在活动会话中看到权限。下面是它是如何在HelloFacebookSample完成:

if ([FBSession.activeSession.permissions indexOfObject:@"publish_actions"] == NSNotFound) { 
    // permission does not exist 
} else { 
    // permission exists 
} 
+0

这对我不起作用。 FBSession.activeSession.permissions为零 – Lucas

+0

如果您的会话具有访问令牌,则权限可用。您是否检查过FBSession.activeSession.accessTokenData不是零,并且它的accessToken已设置? –

+0

@Lucas,是的,Rephael是对的,至少'public_profile'将作为权限可用。我认为它不会空。 – Hemang

0

不用手动检查的权限,你可以检查会话处于活动状态,并要求发布权限:如果用户已经授予的权限,一个额外的确认对话框不被张贴。请参见下面的代码示例:

- (void)requestWritePermission:(UIViewController *)viewController channel:(NSString *)channel callback:(void(^)(BOOL success))callback 
{ 
    if ([FBSession.activeSession isOpen]) 
    { 
     [FBSession.activeSession requestNewPublishPermissions:@[@"publish_actions"] 
               defaultAudience:FBSessionDefaultAudienceFriends 
              completionHandler:^(FBSession *session, NSError *error) { 
               callback(error == nil); 
              }]; 
    } 
    else 
    { 
     // Attempt to request publish permission without read permission. 
    } 
} 

的代码是不完整的,但应该让你开始。