2012-09-27 102 views
1

使用Facebook SDK 3.1我希望在发送发布请求之前,应用程序拥有“publish_stream”权限。FBSession的Facebook SDK 3.0权限数组拥有错误的权限

问题是[FBSession.activeSession.permissions indexOfObject:@“publish_stream”]永远不会返回NSNotFound,即使用户在登录期间选择不允许任何内容。由于我假设我有权发送帖子但它返回HTTP状态码403,因为我实际上没有所需的权利。

IS是一个错误,或者有另一种方法来检查活动会话的权限。

回答

0

Facebook上证实,它在iOS的SDK中的错误的访问令牌相关联的所有权限:https://developers.facebook.com/bugs/111727002307769

的错误仍然仍在iOS SDK 3.1中

解决方法是使用API​​调用/me/permissions来检查许可,如Igy提出的。

+0

谢谢你,我依赖于/我/权限的结果,但是每次你想发布帖子或者其他东西时,发送和请求请求并不高雅。用户可以在允许一次后改变给定的权限。 –

+0

我同意。一个稍微不同的方法是为#200错误添加处理程序(需要扩展权限),而不是每次发送/ me/permissions请求。不是很优雅,但它毕竟是一个错误的解决方法。 –

1

如果您的API调用/me/permissions当前与您正在使用将返回

+0

在这种情况下,FBSession.activeSession.permissions会返回我请求的权限列表,但会话启动时它不会更新。 –

0
[FBSession.activeSession.permissions indexOfObject:@"publish_stream"] != NSNotFound 

上面的代码不是检查写入权限的正确方法。

取而代之的是,请尝试以下方法:

-(BOOL)hasWritePermissions{ 

    NSArray *permissiones = [FBSession activeSession].permissions; 
    for (NSString *permission in permissiones) { 

     if ([permission isEqualToString:@"publish_actions"]) { 
      return YES; 
     } 
    } 

    return NO; 
} 
+1

您可以简化为'[[FBSession activeSession] .permissions containsObject:@“publish_actions”]',但问题的根源在于权限列表被缓存。 – Zorayr

0

正如@Zorayr说你可以做如下。

NSArray *permissions = FBSession.activeSession.permissions; 
    if ([permissions containsObject:@"publish_actions"]) { 
     [self performNextTestWithLastPostID:nil]; 
    } else { 
     ... 
}