Facebook SDK login never calls back my application on iOS 9

前端 未结 10 2696
名媛妹妹
名媛妹妹 2020-11-29 01:30

I\'ve followed this guide to update my application to use Facebook SDK 4.6 to work properly when built with the iOS 9 SDK.

When I tap the login button now, a Safari

相关标签:
10条回答
  • 2020-11-29 01:43

    I was using the old 3.24 version and on iOS 9 I was facing a similar problem.

    Found that in appDelegate method - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

    was

    return [FBSession.activeSession handleOpenURL:url];

    instead of

    return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];

    0 讨论(0)
  • 2020-11-29 01:48

    Did you follow these steps?

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     return [[FBSDKApplicationDelegate sharedInstance] application:application
    didFinishLaunchingWithOptions:launchOptions];
    }
    
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
      return [[FBSDKApplicationDelegate sharedInstance] application:application
    openURL:url
    sourceApplication:sourceApplication
    annotation:annotation
     ];
    }
    

    I think you are missing the point where you got to call the applications delegate in App delegate. The second method is vital coz it gives the callback to your application about the login did finish in safari by the user

    0 讨论(0)
  • 2020-11-29 01:52

    For total swift newbies like myself, the problem was an alternate implementation of the application() method:

    Working version:

     func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        return FBSDKApplicationDelegate.sharedInstance().application(
            application,
            open: url,
            sourceApplication: sourceApplication,
            annotation: annotation)
    }
    

    Non working version (Copied from somewhere )

    func application(application: UIApplication, openURL url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        return FBSDKApplicationDelegate.sharedInstance().application(
            application,
            open: url,
            sourceApplication: sourceApplication,
            annotation: annotation)
    }
    
    0 讨论(0)
  • 2020-11-29 01:56

    Turns out that on iOS 9 when UIApplicationDelegate's application:openURL:options: is implemented, application:openURL:sourceApplication:annotation: will not get called.

    So what I had to do is call FBSDKApplicationDelegate's application:openURL:sourceApplication:annotation: from UIApplicationDelegate's application:openURL:options:

    - (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]];
    }
    
    0 讨论(0)
  • 2020-11-29 01:59

    I have just come across this issue, thanks @Hesham for the fix.

    Here is the Swift3 fix:

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
        return FBSDKApplicationDelegate.sharedInstance().application(
            app,
            open: url,
            sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String,
            annotation: options[UIApplicationOpenURLOptionsKey.annotation])
    }
    
    0 讨论(0)
  • 2020-11-29 02:00

    For those of you experiencing this same issue with iOS10 I added this:

    @available(iOS 9.0, *)
    func application(_ application: UIApplication, openURL url: URL, sourceApplication: String?, annotation: AnyObject) -> Bool {
        return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
    }
    

    This should work but as for now its just a workaround

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