麻烦处理Google登录Swift 3 [英] Trouble handling Google sign in Swift 3

查看:168
本文介绍了麻烦处理Google登录Swift 3的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是iOS新手,在Swift 3中遇到了应用程序委托的URL处理问题,我真的可以使用一些指针。
$ b

下面的代码工作得很好在Swift 2.3中:

  func application(application:UIApplication,
openURL url:NSURL,options:[String:AnyObject ]) - > Bool {
返回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)
}

当我粘贴swift 2.3代码直接从Firebase网站,Xcode提示我,很多方法已经改变。特别是,选项对象。

在Swift 2.3中,我可以使用<$ c $使用选项[UIApplicationOpenURLOptionsAnnotationKey]



Xcode提示我将其更改为 UIApplicationOpenURLOptionsKey.sourceApplication._rawValue as String UIApplicationOpenURLOptionsKey.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)

返回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!]

打印(UIApplicationOpenURLOptionsKey.sourceApplication._rawValue作为字符串)
print(UIApplicationOpenURLOptionsKey.annotation._rawValue as String)

返回GIDSignIn.sharedInstance()。handle(url为URL !,
sourceApplication:sourceApplication,
annotation:annotation)
}


解决方案Xcode 8 Swift 3

如果您在Google Sign In中使用多个URL Schemes, :

  func application(_ app:UIApplication,
open url:URL,
选项:[UIApplicationOpenURLOptionsKey:Any] = [:]) - > Bool {
$ b $ if(url.scheme!.isEqual(fbXXXXXXXXXX)){
返回SDKApplicationDelegate.shared.application(app,open:url,options:options)

} else {
返回GIDSignIn.sharedInstance()。handle(URL为URL !,
sourceApplication:options [UIApplicationOpenURLOptionsKey.sourceApplication] as!String !,
annotation:options [ UIApplicationOpenURLOptionsKey.annotation])
}
}


I am new to iOS and am having trouble with app delegate URL handling in Swift 3, and I could really use some pointers.

The below code works perfectly fine in 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)
}

When I paste the swift 2.3 code straight from the Firebase website, Xcode prompts me that a lot of the methods have changed. In particular, the options object.

In Swift 2.3, I can access the source application using options[UIApplicationOpenURLOptionsSourceApplicationKey] and the annotation using options[UIApplicationOpenURLOptionsAnnotationKey]

Xcode prompts me to change it to UIApplicationOpenURLOptionsKey.sourceApplication._rawValue as String and UIApplicationOpenURLOptionsKey.annotation._rawValue as String

Yet when I make the suggested changes, Google returns a URL, but nothing happens. Instead of redirecting to the app, it proceeds to enter the local google site, for me: www.google.co.nz

The full Swift 3 version I have looks like this:

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)
}

解决方案

Xcode 8 Swift 3

If you are using multiple URL Schemes along with Google Sign In, use it like this:

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

这篇关于麻烦处理Google登录Swift 3的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆