ios - 带有发布权限回调的 Facebook iOS 3.1 sdk 登录

标签 ios facebook authentication sdk permissions

我在使用 facebook 3.1 ios sdk 中的发布权限登录时遇到问题。

我的应用有一个分享视频的按钮,当用户点击它时我想添加基本的 + 发布权限。据我了解,我必须打两个电话-

  1. openActiveSessionWithReadPermissions,然后
  2. reauthorizeWithPublishPermissions

这是我现在使用的代码:

//Opens a Facebook session and optionally shows the login UX.
- (void)openSessionForReadPermissions
{
    [FBSession openActiveSessionWithReadPermissions:nil
                                       allowLoginUI:YES
                                  completionHandler:
     ^(FBSession *session,
       FBSessionState state, NSError *error) {

         //this is called even from the reauthorizeWithPublishPermissions
         if (state == FBSessionStateOpen && !error)
         {
             [self openSessionForPublishPermissions];
         }
         else if (state == FBSessionStateClosedLoginFailed)
         {
             [FBSession.activeSession closeAndClearTokenInformation];

             [[NSNotificationCenter defaultCenter] postNotificationName:FBLoginErrorNotification object:session];
         }
     }];
}

-(void)openSessionForPublishPermissions
{    
    NSArray* permissions = [NSArray arrayWithObject:@"publish_stream"];

    [[FBSession activeSession] reauthorizeWithPublishPermissions:permissions
                                                 defaultAudience:FBSessionDefaultAudienceFriends
                                               completionHandler:
     ^(FBSession *session, NSError *error)
     {
         if (!error)
         {
             [[NSNotificationCenter defaultCenter]
              postNotificationName:FBLoginSuccessNotification
              object:session];
         }
         else
         {
             [[NSNotificationCenter defaultCenter]
              postNotificationName:FBLoginErrorNotification
              object:session];
         }
     }];
}

我看到 openSessionForReadPermissions 中的 block 被调用了两次(一次是通过 FBSessionStateOpen 调用,一次是通过 openSessionForPublishPermissions 调用中的 FBSessionStateOpenTokenExtended 调用),并且我在第一次尝试登录应用程序时收到 ErrorReauthorizeFailedReasonUserCancelled(如果 O 之前删除了所有应用程序权限) .

实现此登录的正确方法是什么?该应用程序不需要 Facebook 登录,除了这一功能,所以登录过程应该在同一个按钮推送上。

谢谢!

最佳答案

我遇到了同样的问题。我找到的解决方案是将对 [self openSessionForPublishPermissions]; 的调用包装在 dispatch_async block 中。

例子:

dispatch_async(dispatch_get_current_queue(), ^{
    [self openSessionForPublishPermissions];
});

原因是reauthorize..的调用需要在调用openActiveSession..的事件循环之后。

关于ios - 带有发布权限回调的 Facebook iOS 3.1 sdk 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12915420/

相关文章:

ios - 在 Xcode 中,NSFetchRequest 只返回对象,而不是它们的属性

ios - 不支持推送导航 Controller - 自 Xcode 6.2 更新以来

javascript - 如何从 Facebook API 返回的 jsonp 中获取数据作为封面图片

spring - Spring Security Filter Chain 如何工作

authentication - 如何在 Azure AD 身份验证后重定向到 ASP Net Core MVC 中的不同 Controller 操作

ios - 我如何使用 NSJSONSerialization 与特殊字符,如 "ñ"?

ios - 是否可以从后台运行的应用程序唤醒 BLE?

ios - iOS 7中不显示社交 View 的默认警报

ios - 更新适用于 iOS 的 Facebook SDK

javascript - IE 9 中阻止的 Facebook 登录弹出窗口