Search code examples
facebook-ios-sdkaccess-token

Logging in to Facebook pre iOS 9


I am using Xcode 7 to write an app targeted to iOS7, using Facebook iOS idk v4.1. When I execute a facebook login, [FBSDKAccessToken currentAccessToken] is still nil in the FBSDKLoginButton callback. I have tried several SO solutions for fixing this, but none has worked for me so far.

I think the problem is in my appDelegate. Here is my code:

- (BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    //for Facebook signin
    if([[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation])
    {
        return YES;
    }
    //for Google Signin on iOS 8 and earlier
    else
    {
        NSDictionary* options = @{UIApplicationOpenURLOptionsSourceApplicationKey:sourceApplication, UIApplicationOpenURLOptionsAnnotationKey:annotation};
        return [self application:application openURL:url options:options];
    }
}

//iOS 9 and later
//for Google Signin
- (BOOL) application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{
    if ([[[NSUserDefaults standardUserDefaults] objectForKey:UDLoginType] integerValue] == ltGoogle)
    {
        return [[GIDSignIn sharedInstance] handleURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
    }
    else
    {
        return YES;
    }
}

When my app returns from Facebook, application:openURL:options (iOSv9+) is called. That method contains no calls to the Facebook sdk. There is a call to the Facebook sdk in application:openURL:sourceApplication:annotation (iOSv8-), but I don’t know how to translate that into the iOSv9 call, as Google does. So as far as I can tell, there’s no processing of the login URL after a Facebook login. What am I doing wrong?

Thanks


Solution

  • Here is how you could implement for ios 9+

    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options {
            return [[FBSDKApplicationDelegate sharedInstance] application:app
                                                                  openURL:url
                                                        sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                                                               annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]
                    || [[GIDSignIn sharedInstance] handleURL:url
                                           sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                                                  annotation:options[UIApplicationOpenURLOptionsSourceApplicationKey]];
        }
    

    for below ios 9

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    {
    
            return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                              openURL:url
                                                    sourceApplication:sourceApplication
                                                           annotation:annotation
                     ] ||
                    [[GIDSignIn sharedInstance] handleURL:url
                                              sourceApplication:sourceApplication
                                                     annotation:annotation];
       }