无法处理谷歌签到Swift 3

Cle*_*ent 5 xcode oauth ios firebase

我是iOS新手,在Swift 3中遇到app委托URL处理问题,我真的可以使用一些指针.

以下代码在Swift 2.3中运行得非常好:

func application(application: UIApplication,
  openURL url: NSURL, options: [String: AnyObject]) -> Bool {
    return GIDSignIn.sharedInstance().handleURL(url,
        sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String,
        annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
}


func application(application: UIApplication,
  openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
    var options: [String: AnyObject] = [UIApplicationOpenURLOptionsSourceApplicationKey: sourceApplication,
                                        UIApplicationOpenURLOptionsAnnotationKey: annotation]
    return GIDSignIn.sharedInstance().handleURL(url,
        sourceApplication: sourceApplication,
        annotation: annotation)
}
Run Code Online (Sandbox Code Playgroud)

当我直接从Firebase网站粘贴swift 2.3代码时,Xcode会提示我许多方法已经改变.特别是options对象.

在Swift 2.3中,我可以使用options[UIApplicationOpenURLOptionsSourceApplicationKey]和使用注释来访问源应用程序options[UIApplicationOpenURLOptionsAnnotationKey]

Xcode提示我将其更改为UIApplicationOpenURLOptionsKey.sourceApplication._rawValue as StringUIApplicationOpenURLOptionsKey.annotation._rawValue as String

然而,当我进行建议的更改时,Google会返回一个网址,但没有任何反应.而不是重定向到应用程序,它继续进入本地谷歌网站,为我:www.google.co.nz

完整的Swift 3版本我看起来像这样:

func application(application: UIApplication,
                 openURL url: NSURL,
                 options: [String: AnyObject]) -> Bool {
    print(UIApplicationOpenURLOptionsKey.sourceApplication._rawValue as String)
    print(UIApplicationOpenURLOptionsKey.annotation._rawValue as String)

    return GIDSignIn.sharedInstance().handle(url as URL!,
                                             sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication._rawValue as String] as! String!,
                                             annotation: options[UIApplicationOpenURLOptionsKey.annotation._rawValue as String])
}

func application(application: UIApplication,
             openURL url: NSURL,
             sourceApplication: String?,
             annotation: AnyObject?) -> Bool {
    var options: [String: AnyObject] = [UIApplicationOpenURLOptionsKey.sourceApplication._rawValue as String: sourceApplication as AnyObject,
                                        UIApplicationOpenURLOptionsKey.annotation._rawValue as String: annotation!]

    print(UIApplicationOpenURLOptionsKey.sourceApplication._rawValue as String)
    print(UIApplicationOpenURLOptionsKey.annotation._rawValue as String)

    return GIDSignIn.sharedInstance().handle(url as URL!,
                                             sourceApplication: sourceApplication,
                                             annotation: annotation)
}
Run Code Online (Sandbox Code Playgroud)

n.b*_*y.n 18

Xcode 8 Swift 3

如果您使用多个网址计划以及Google登录,请按以下方式使用:

func application(_ app: UIApplication,
                 open url: URL,
                 options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

    if(url.scheme!.isEqual("fbXXXXXXXXXXX")) {
        return SDKApplicationDelegate.shared.application(app, open: url, options: options)

    } else {
        return GIDSignIn.sharedInstance().handle(url as URL!,
                                    sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!,
                                    annotation: options[UIApplicationOpenURLOptionsKey.annotation])
    }
}
Run Code Online (Sandbox Code Playgroud)