Facebook authorization fails on iOS6 when switching FB account on device

后端 未结 6 2018
难免孤独
难免孤独 2020-11-28 04:14

I\'m using die Facebook SDK 3.1.1 to implement FB Connect in my iOS application. This works fine in the simple case with either the new FB integration (logged in on iOS) or

相关标签:
6条回答
  • 2020-11-28 04:34

    In ios 6 with fb sdk 3.1.1. Please pass permissions param as "nil or email" in "[FBSessio openActiveSessionWithReadPermissions..." method. Here my code it was works great.

    #define IOS_NEWER_OR_EQUAL_TO_6 ( [ [ [ UIDevice currentDevice ] systemVersion ] floatValue ] >= 6.0 )
    
    -(void)showFBLogin
    {
        [FBSession.activeSession closeAndClearTokenInformation];
    
        NSArray *permissions = [NSArray arrayWithObjects:@"email, publish_actions, publish_stream", nil];
    
    #ifdef IOS_NEWER_OR_EQUAL_TO_6
        permissions = nil; or NSArray *permissions = [NSArray arrayWithObjects:@"email",nil];
    #endif
    
        NSLog(@"\npermissions = %@", permissions);
        [FBSession openActiveSessionWithReadPermissions:permissions
                                           allowLoginUI:YES
                                      completionHandler:
         ^(FBSession *session,
           FBSessionState state, NSError *error) {
             NSLog(@"\nfb sdk error = %@", error);
             switch (state) {
                 case FBSessionStateOpen:
                     [[FBRequest requestForMe] startWithCompletionHandler:
                      ^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {
                          if (!error) {
                              //success
                          } 
                      }];
                     break;
                 case FBSessionStateClosed:
                     //need to handle
                     break;
                 case FBSessionStateClosedLoginFailed:
                     //need to handle
                     break;
                 default:
                     break;
             }
         }];
    }
    
    0 讨论(0)
  • 2020-11-28 04:35

    I had the same problem. Check that your FB App is enabled in Settings -> Facebook. Mine was disabled (even though I don't remember disabling it) and once I enabled it, it was fixed.

    In my test process, I've added and removed my FB App several times from my FB Account, which is linked with my iPhone. It may explain why, magically, my app was disabled.

    0 讨论(0)
  • 2020-11-28 04:40


    I have the same problem on 3.1.3 FB SDK with iOS7.1. And I find a solution here. Hope it help!!
    I have tried all answers here.
    @loganathan nil permissions, @ill_always_be_a_warriors fbResync.
    All of those don't work for me.

    But I found it will works well when I launch the same code in iPhone 7.1 simulator
    (without SSO"Single Sign On")

    The same code works well on old version iOS FB SDK(not sure which version, but not 3.13)
    (but no SSO will show when try to login)

    So, I try to re-write a sample problem. I found several different here.
    1. https://developers.facebook.com/docs/ios/getting-started Add new FacebookDisplayName
    2. I modify my BundleID for iTune connect but I am not update it back to Faceboook App Dev


    After modify those setting, it works on my iOS app with SSO feature.
    Hope it help!!

    0 讨论(0)
  • 2020-11-28 04:42

    Another answer gives a way to manually resync the device with the server. I defined a method called fbRsync to call this code. Make sure to #import <Accounts/Accounts.h> in your implementation file and then define this method:

    -(void)fbResync
    {
        ACAccountStore *accountStore;
        ACAccountType *accountTypeFB;
        if ((accountStore = [[ACAccountStore alloc] init]) && (accountTypeFB = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook] ) ){
    
        NSArray *fbAccounts = [accountStore accountsWithAccountType:accountTypeFB];
        id account;
        if (fbAccounts && [fbAccounts count] > 0 && (account = [fbAccounts objectAtIndex:0])){
    
        [accountStore renewCredentialsForAccount:account completion:^(ACAccountCredentialRenewResult renewResult, NSError *error) {
            //we don't actually need to inspect renewResult or error.
            if (error){
    
            }
        }];
    }
    

    }

    I then call fbResync if openActiveSessionWithReadPermissions yields an error:

    [FBSession openActiveSessionWithReadPermissions:permissions
                                       allowLoginUI:YES
                                  completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
         if(error)
         {
             NSLog(@"Session error");
             [self fbResync];
             [NSThread sleepForTimeInterval:0.5];   //half a second
             [FBSession openActiveSessionWithReadPermissions:permissions
                                                allowLoginUI:YES
                                           completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
                [self sessionStateChanged:session state:state error:error];
                                           }];
    
         }
         else
             [self sessionStateChanged:session state:state error:error];
     }];
    

    The half a second delay is likely unnecessary, but it currently gives me piece of mind.

    This seems to solve the problem for me. I can now switch between Facebook accounts and am able to log in. Yay!

    0 讨论(0)
  • 2020-11-28 04:46

    Did you Try the RenewSystemCredential Methods? Take a look at this post:

    Facebook iOS SDK extendAccessToken not Working - fbDidExtendToken not being called

    0 讨论(0)
  • 2020-11-28 04:46

    I got the same error. But i used @ill_always_be_a_warriors method: -(void)fbResync but not work for me.

    I finally found it's my permissions issue, i removed offline_access permission, it works, hope it helps some one.

    0 讨论(0)
提交回复
热议问题