简体   繁体   English

facebook openurl登录ios 9方法ios swift

[英]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. 我在我的应用程序中同时集成了facebook和gmail,但只要我为gmail登录添加open url功能,facebook登录就会停止工作。 I have this code for open url in my app 我在我的应用程序中有这个代码用于打开URL

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 ie after facebook login we don't redirect back to the app. 这适用于facebook登录但是当我为ios 9添加openmail的gmail方法时出现问题,即在登录facebook后我们不会重定向回应用程序。 In simulator the white screen shows in safari. 在模拟器中,白色屏幕显示在safari中。 the code for the gmail login for ios 9 ios 9的gmail登录代码

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. 如果我注释掉上面的代码,facebook登录正常工作,我想问题是我必须在ios 9中为facebook的openurl返回布尔值。 But I don't know what to do with this ? 但我不知道该怎么办? TIA TIA

Found my answer i need to implement both methods of openurl Like this 找到我的答案我需要实现openurl的两种方法

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 我只需要检查ios 9的facebook open url方法

Edit for swift 3.0 the function changed 编辑swift 3.0功能已更改

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
}

I tried @Aruk k answer but didn't work for me 我试过@Aruk k回答但是对我不起作用

I have also faced this problem from past 1 month.Followed all the steps and tutorials but nothing worked. 从过去1个月开始我也遇到了这个问题。关注所有步骤和教程,但没有任何效果。 I was integrating facebook login with firebase in ios 10 swift 3. Finally, I m able to successfully implement it. 我正在ios 10 swift 3中将facebook登录与firebase集成。最后,我能够成功实现它。 I corrected it by making following changed in AppDelegate file. 我通过在AppDelegate文件中进行以下更改来更正它。

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        FIRApp.configure()
        FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
          return true
    }


    @available(iOS 9.0, *)
    func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any])
        -> Bool {
            var shouldOpen :Bool = FBSDKApplicationDelegate.sharedInstance().application(application,  open: url, sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!,annotation: options[UIApplicationOpenURLOptionsKey.annotation])
            return shouldOpen
    }

    // for iOS below 9.0
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        var shouldOpen :Bool = FBSDKApplicationDelegate.sharedInstance().application(application,open: url as URL!,sourceApplication: sourceApplication,annotation: annotation)
        return shouldOpen
    }

I Hope it might help others 我希望它可以帮助别人

tested on ios 10.2 Emulator, iPhone 6 Plus running with 10.2 在运行10.2的ios 10.2仿真器,iPhone 6 Plus上测试

Swift 4. Xcode 9. iOS 11. Google SignIn + Facebook SignIn. Swift 4. Xcode 9. iOS 11. Google SignIn + Facebook SignIn。 AppDelegate. AppDelegate中。

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

    var signedIn: Bool = GIDSignIn.sharedInstance().handle(url, sourceApplication: sourceApplication, annotation: annotation)

    signedIn = signedIn ? signedIn : FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)

    return signedIn
}

@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {

    var signedIn: Bool = GIDSignIn.sharedInstance().handle(url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: options[UIApplicationOpenURLOptionsKey.annotation])

    signedIn = signedIn ? signedIn : FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: nil)

    return signedIn
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM