David U
David U

Reputation: 993

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

Upvotes: 2

Views: 298

Answers (1)

Rohit Pradhan
Rohit Pradhan

Reputation: 3875

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];
   }

Upvotes: 4

Related Questions