0

我正在为我的应用程序使用 FB ios SDK v3.5。对于部分登录,我不使用 FBLoginView 登录,而是使用 UIButton 并在该 UIButton 的处理程序中调用 [FBSession openActiveSessionWithReadPermission]。

在 FB SDK v3.2.1 中,我使用以下代码来处理不同的登录场景,效果很好:

self.useAccountAllowed = true;
    ACAccountStore *accountStore;
    ACAccountType *accountTypeFB;
    if ((accountStore = [[ACAccountStore alloc] init]) &&
        (accountTypeFB = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook] ) ){

        NSArray *fbAccounts = [accountStore accountsWithAccountType:accountTypeFB];
        id account;
        if (!fbAccounts)
        {
            //do not log into FB on the device
        }
        else if ([fbAccounts count] == 0) {
            [FBSession.activeSession closeAndClearTokenInformation];
            self.useAccountAllowed = false; //User does not allow the app to use the account
        }
        else if ([fbAccounts count]>0 && (account=[fbAccounts objectAtIndex:0])) {
            [accountStore renewCredentialsForAccount:account completion:^(ACAccountCredentialRenewResult renewResult, NSError *error) {  //User allowes the app to use the account
                //we don't actually need to inspect renewResult or error.
                if (error){

                }
            }];
        }
    }

然后在 UIButton 的处理函数中:

if (self.useAccountAllowed) {
        [FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler:^(FBSession* session, FBSessionState status, NSError* error){
            [self sessionStateChanged:session state:status error:error];}];
    }
    else {
        NSArray* lPermission = FBSession.activeSession.permissions;
        [FBSession openActiveSessionWithPermissions:lPermission allowLoginUI:YES completionHandler:^(FBSession* session, FBSessionState status, NSError* error){
            [self sessionStateChanged:session state:status error:error];}];

也就是说如果用户不允许app使用账号,我们只需要通过safari使用快速切换的方式登录即可;否则我们使用本机登录。

但是在 SDK v3.5 中,还是一样的代码,但是有时候当应用程序执行并登录 facebook 时,应用程序不在“允许这些应用程序使用您的帐户”列表中,所以这段代码无法区分这两种情况: 1.该应用不在列表中;2. 用户不允许该应用使用该帐号。所以应用程序无法本地登录。

请注意,此问题是随机存在的。有时我硬编码直接调用 openActiveSessionWithPermissions,这个问题就消失了。但我不确定是不是这个原因。

我只是想知道在 FB SDK v3.5 中,我是否需要显式调用一些与 iOS 设置相关的 SDK 函数?

4

0 回答 0