【问题标题】:Facebook iOS: requestNewPublishPermissions not asking user for new authorityFacebook iOS:requestNewPublishPermissions 不向用户询问新权限
【发布时间】:2014-08-13 19:21:29
【问题描述】:

我遇到了 requestNewPublishPermissions 的问题(我使用的是 SDK 版本 3.17)。 Facebook 文档说只需读取权限即可登录,然后再请求写入权限,这就是我想要做的。我可以使用如下代码让用户正常登录:

[FBSession openActiveSessionWithReadPermissions:@[@"public_profile"]
                                   allowLoginUI:YES
                              completionHandler:^(FBSession *session, FBSessionState state, NSError *error)
{
     // Handler for session state changes
     // This method will be called EACH time the session state changes,
     // also for intermediate states and NOT just when the session open
     [self sessionStateChanged:session state:state error:error];
}];

然后,当我想发布到时间线时,我要求使用下面的代码扩展权限。该应用程序通过 Facebook 网页启动到 Safari。但是,该网页并没有要求写权限,而是说该应用程序已经获得了许可。然后当我点击确定,控制权返回到应用程序时,我没有发布权限。见“这就是它结束的地方!”下面。

我已尝试访问 facebook.com 并删除“应用程序”下已授予的权限。那没有任何区别。无论如何,我也尝试过发布,但这给了我一个错误,说我没有正确的权限。

有什么想法吗?

- (void) requestPublishPermission:(void (^)(void)) action
{
    // Request publish_actions
    [FBSession.activeSession requestNewPublishPermissions:[NSArray arrayWithObject:@"publish_actions"]
                                          defaultAudience:FBSessionDefaultAudienceFriends
                                        completionHandler:^(FBSession *session, NSError *error)
     {
         if (!error)
         {
             if ( [FBSession.activeSession.permissions indexOfObject:@"publish_actions"] == NSNotFound )
             {
                 // this is where it ends up!
             }
             else
             {
                 // Permission granted, publish the story
                 action();
             }
         }
         else
         {
             // permission denied, alert user
         }
     }];
}

【问题讨论】:

  • 我现在也有同样的问题X(你找到解决办法了吗??
  • 不,我从来没有这样做过。 IIRC,我使用原生 Facebook 共享 GUI 作为解决方法。
  • 我明白了,非常感谢!

标签: ios facebook


【解决方案1】:

您需要将您登录的用户添加为开发人员/测试人员。或者您需要将您的应用提交给 Facebook 以供审核。

【讨论】:

  • 这是真实的但部分场景。如果“publish_actions”尚未获得批准或 FB 应用程序只有特定 FB 应用程序的开发人员将获得 FB 批准屏幕。它可能发生在用户使用 FB Web 客户端的情况下。会话将关闭,重新打开会话,但不会将新权限添加到会话中。
【解决方案2】:

我也有同样的问题,只有当用户不使用 FB 应用程序并且一切都通过网络发生时才会发生。这是我为解决问题所做的:

typedef void(^facebookPostCompBlock)(FBSession *session, NSError* err, BOOL publishActionPermissions);

- (void) obtainPostPermissionsWithComplition:(facebookPostCompBlock) comp {
    if ([[FBSession activeSession] isOpen]) {

        if ([[[FBSession activeSession] permissions]indexOfObject:@"publish_actions"] == NSNotFound) {
            [FBSession.activeSession requestNewPublishPermissions:@[@"publish_actions"]
                                                  defaultAudience:FBSessionDefaultAudienceFriends
                                                completionHandler:^(FBSession *session, NSError *error)

             {
                 BOOL gotPublishActionPermissions = TRUE;
                 if ([[[FBSession activeSession] permissions]indexOfObject:@"publish_actions"] == NSNotFound) {
                     gotPublishActionPermissions = FALSE;                     
                 }
                 if (comp) {
                     comp(session,error,gotPublishActionPermissions);
                 }
             }];
        } else {
            if (comp) {
                comp([FBSession activeSession],nil,TRUE);
            }
        }
    } else {
        BOOL openedSynchronously = [FBSession openActiveSessionWithPublishPermissions:@[@"publish_actions"]
                                           defaultAudience:FBSessionDefaultAudienceFriends
                                              allowLoginUI:YES
                                         completionHandler:^(FBSession *session, FBSessionState status, NSError *error)
        {
            if (!error && status == FBSessionStateOpen) {
                [self obtainPostPermissionsWithComplition:comp];
            } else {
                BOOL gotPublishActionPermissions = TRUE;
                if ([[session permissions]indexOfObject:@"publish_actions"] == NSNotFound) {
                    gotPublishActionPermissions = FALSE;
                    BLog(@"+ NOT FOUND +");
                } else {
                   if (comp) {
                       comp(session,error,gotPublishActionPermissions);
                   }
                }
            }
        }];
    }
}

下面唯一的问题(需要故障保护)是会话将从打开切换到关闭,并且您最终会出现循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 2013-05-21
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多