Facebook iOS - 在 SSO 上禁止应用程序然后卸载应用程序时出错

Posted

技术标签:

【中文标题】Facebook iOS - 在 SSO 上禁止应用程序然后卸载应用程序时出错【英文标题】:Facebook iOS - Error when disallowing app on SSO and then uninstalling app 【发布时间】:2013-11-29 04:22:44 【问题描述】:

我开发了一个与 Facebook 集成的应用程序,我正在测试多个登录失败的场景。然后我看到了一个卡住我的人。

场景是:

    用户使用他的帐户配置了 ios 6 SSO。 然后用户打开应用程序,不要授权它。 然后用户从 iOS 中删除他的 Facebook 帐户。

结果:

应用程序卡住了,因为它正在获取未经授权的信息,我无法再更改它,因为 Facebook 帐户不再集成到 iOS。

我的问题是:

我需要知道用户是否在 iOS 上设置了他的 Facebook 凭据(设置 > Facebook)。 我怎么知道?我搜索了 Facebook 文档并没有找到。

这是我的代码:

+ (void)initFacebook:(void (^)(int))initResult

    NSLog(@"init: activeSession.state = %i", FBSession.activeSession.state);

    [FBSession renewSystemCredentials:^(ACAccountCredentialRenewResult result, NSError *error) 
        if (result == ACAccountCredentialRenewResultFailed) 
            //User has changed his password and must update his iOS login credentials
            NSLog(@"sync: ACAccountCredentialRenewResultFailed -- error.code = %i", error.code);

            //Display some message to user…           

            //Get rid of the token with wrong credentials
            [FBSession.activeSession closeAndClearTokenInformation];
            FBSession.activeSession = [[FBSession alloc] init];

            initResult(1);
        
        else if (result == ACAccountCredentialRenewResultRejected) 
            //User has unauthorized my App in Settings > Facebook
            NSLog(@"sync: ACAccountCredentialRenewResultRejected -- error.code = %i", error.code);

            //Display some message to user…

            //Get rid of the token with wrong credentials            
            [FBSession.activeSession closeAndClearTokenInformation];
            FBSession.activeSession = [[FBSession alloc] init];

            initResult(2);
        
        else if (result == ACAccountCredentialRenewResultRenewed) 
            //Everything is fine with iOS credentials
            NSLog(@"sync: ACAccountCredentialRenewResultRenewed -- error.code = %i", error.code);

            //Just to be sure that the session state is right
            if (FBSession.activeSession.state == FBSessionStateCreated ||
                FBSession.activeSession.state == FBSessionStateCreatedOpening ||
                FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded) 

                //Open the active session
                [FBSession openActiveSessionWithReadPermissions:@[@"basic_info", @"user_photos"]
                                                   allowLoginUI:YES
                                              completionHandler:^(FBSession *session, FBSessionState status, NSError *error) 
                                                  NSLog(@"opensession: activeSession.state = %i", FBSession.activeSession.state);


                                              ];
            
        
    ];

谢谢!

【问题讨论】:

【参考方案1】:

您的问题是您在错误的位置查找信息。 放弃查看 Facebook SDK 文档并转至 Social.framework documentation。 这些是关于系统 facebook 帐户的。

【讨论】:

谢谢!!我可以使用 [SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook] 来验证 Facebook 的 SSO 是否设置在 iOS 6 上。无论如何,我再次编写了我的例程,不再需要它。现在,在我从 iOS 同步我的凭据后,如果返回状态为 ACAccountCredentialRenewResultRejected 我尝试再次打开会话,但使用 facebook SDK [FBSession openActiveSessionWithReadPermissions] 如果令牌卡住,则会刷新令牌。感谢您的帮助!

以上是关于Facebook iOS - 在 SSO 上禁止应用程序然后卸载应用程序时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 Facebook IOS SDK 中禁用单点登录 (SSO)

Facebook SSO IOS 不返回应用

使用 Facebook iOS 应用将 Xamarin 应用与 Facebook SSO 集成

facebook iOS sdk 自定义委托和 SSO 授权

iOS 应用程序的 Facebook SSO 问题

如何使用 facebook ios sdk for iphone 实现单点登录 (SSO)