Search code examples
iosswiftfacebookios9openurl

facebook openurl for login in ios 9 method ios swift


I have both facebook and gmail integration in my app but as soon as I add the open url function for gmail login the facebook login stops working. I have this code for open url in my app

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {

    var shouldOpen :Bool = FBSDKApplicationDelegate.sharedInstance().application(application,openURL: url,sourceApplication: sourceApplication,annotation: annotation)

    shouldOpen = shouldOpen ? shouldOpen : GIDSignIn.sharedInstance().handleURL(url,
                                                                                sourceApplication: sourceApplication,
                                                                                annotation: annotation)

    return shouldOpen

}

This works fine with the facebook login but when I add openurl method for gmail for ios 9 the problem occures i.e. after facebook login we don't redirect back to the app. In simulator the white screen shows in safari. the code for the gmail login for ios 9

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
    if #available(iOS 9.0, *) {

        return GIDSignIn.sharedInstance().handleURL(url,
                                                    sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String?,
                                                    annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
    }
    return true
}

If I comment out the above code the facebook login works correctly I guess the problem is that I have to return boolean for openurl of facebook in ios 9 as well. But I don't know what to do with this ? TIA


Solution

  • Found my answer i need to implement both methods of openurl Like this

    func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    
        var shouldOpen :Bool = FBSDKApplicationDelegate.sharedInstance().application(application,openURL: url,sourceApplication: sourceApplication,annotation: annotation)
    
        shouldOpen = shouldOpen ? shouldOpen : GIDSignIn.sharedInstance().handleURL(url,
                                                                                    sourceApplication: sourceApplication,
                                                                                    annotation: annotation)
        return shouldOpen
    
    }
    
    func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
        if #available(iOS 9.0, *) {
            var shouldOpen :Bool = FBSDKApplicationDelegate.sharedInstance().application(
                app,
                openURL: url,
                sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String,
                annotation: nil)
    
            shouldOpen = shouldOpen ? shouldOpen : GIDSignIn.sharedInstance().handleURL(url,sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String?,
                                                                                        annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
    
            return shouldOpen
        }
        return true
    }
    

    i just need to check for facebook open url method for ios 9 as well

    Edit for swift 3.0 the function changed

    private func application(application: UIApplication, openURL url: URL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    
    
        return  FBSDKApplicationDelegate.sharedInstance().application(application,open: url as URL!,sourceApplication: sourceApplication,annotation: annotation)
    
    }
    
    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        if #available(iOS 9.0 , *){
         return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: "UIApplicationOpenURLOptionsKey", annotation: nil)   
    
        }
    
    return true
    }