12

一个关于 iOS 版 Facebook SDK 的快速问题。我正在尝试为用户实现授予我的应用程序访问扩展权限的功能。

虽然当用户接受扩展权限请求(从用户被重定向到的 Facebook iOS 应用程序)时代码工作正常,但我无法检测到用户何时返回应用程序而既没有接受权限,也没有单击取消然后返回应用程序。

如果我单击“取消”并将多任务返回应用程序,则不会记录任何内容,屏幕上也不会显示任何内容。当我再次尝试重新授权时,Facebook SDK 会抛出异常:

FBSession:当先前的重新授权调用尚未完成时,重新授权无效。

虽然我可以捕捉到异常,但它仍然无济于事,因为我不知道如何停止先前的调用以允许用户再次尝试重新授权。

这是我目前正在使用的代码:

@try {
    [[FBSession activeSession] reauthorizeWithPermissions:[self requiredPermissions]
                                             behavior:FBSessionLoginBehaviorWithFallbackToWebView
                                    completionHandler:^(FBSession *session, NSError *error) {
        if (!error) {
            [self fetchUserPermissionsWithCompletionHandler:^(BOOL extendedGranted) {
                if (extendedGranted) {
                    [self setCanPostToActivityStream:YES];
                }
            }];
        }
        else {
            NSLog(@"%@", [error localizedDescription]);
        }
    }];
}
@catch (NSException *exception) {
    NSLog(@"%@", exception);
}

现在,问题不在于上面的代码 - 代码工作正常。我再次遇到的问题是,当用户在允许权限后没有成功返回应用程序时,取消之前的重新授权调用。Facebook SDK 本身似乎并没有以任何方式提醒应用程序这种情况。

4

2 回答 2

8

从您的应用程序的委托中,当- (void)applicationDidBecomeActive:(UIApplication*)application被调用时,您需要调用活动会话的handleDidBecomeActive方法。一旦你这样做了,与你的reauthorizeWithPublishPermissions调用关联的完成处理程序将被调用,并提供适当的错误。

- (void)applicationDidBecomeActive:(UIApplication*)application
{
    [[FBSession activeSession] handleDidBecomeActive];
}
于 2012-12-08T13:14:47.057 回答
0

您应该看到从 SDK 返回的是来自重新授权完成处理程序的错误。

{
    "com.facebook.sdk:ErrorLoginFailedReason" = "com.facebook.sdk:ErrorReauthorizeFailedReasonUserCancelled";
}

我使用以下设置测试了类似的东西:Xcode 4.5、iOS 5、针对 m.facebook.com 授权。初始授权后,我输入代码以重新授权,然后单击取消并收到此错误。

    [FBSession.activeSession
     reauthorizeWithPublishPermissions:
     [NSArray arrayWithObject:@"publish_actions"]
     defaultAudience:FBSessionDefaultAudienceFriends
     completionHandler:^(FBSession *session, NSError *error) {
        if (!error) {
            // Success case
        } else {
            // Check the error, info
            // [[error userInfo] objectForKey:@"com.facebook.sdk:ErrorLoginFailedReason"]
        }
    }];

如果您没有看到这个,那么这是一个错误,您可能需要将其提交给 Facebook。

于 2012-10-03T04:22:40.617 回答