谷歌登录不适用于iOS 10

谷歌登录不适用于iOS 10,ios,google-signin,swift4,ios10.3,Ios,Google Signin,Swift4,Ios10.3,我已经在我的项目中将googlesinapi与swift4.0集成。它在iOS 11.0上运行,但当我在iOS 10.0上测试时,它会在浏览器或设备上打开Safari登录页面,并在成功签名后打开Google搜索页面 当我点击下面显示的GoogleSignIn按钮时,它会打开如下图所示的浏览器 然后我填写凭证 成功登录后,它将重定向到Google页面,而不是应用程序页面 我在AppDelegate中使用了错误的处理程序 func application(_ app: UIApplication,

我已经在我的项目中将
googlesinapi
swift4.0
集成。它在iOS 11.0上运行,但当我在iOS 10.0上测试时,它会在浏览器或设备上打开
Safari
登录页面,并在成功签名后打开
Google
搜索页面

  • 当我点击下面显示的
    GoogleSignIn
    按钮时,它会打开如下图所示的浏览器

  • 然后我填写凭证

  • 成功登录后,它将重定向到
    Google
    页面,而不是应用程序页面


  • 我在
    AppDelegate
    中使用了错误的处理程序

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
         return GIDSignIn.sharedInstance().handle(url as URL!, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: options[UIApplicationOpenURLOptionsKey.annotation])
    }
    
    之前我使用的是:

    private func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool
    
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool
    
    但它应该是:

    private func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool
    
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool
    

    检查您的
    GIDSignInUIDelegate
    ,不要忘记

    func sign(_ signIn: GIDSignIn!, present viewController: UIViewController!) {
        self.present(viewController, animated: true, completion: nil)
    }
    
    func sign(_ signIn: GIDSignIn!, dismiss viewController: UIViewController!) {
        self.dismiss(animated: true, completion: nil)
    }
    

    您必须在
    AppDelegate
    中实现此委托功能

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
         return GIDSignIn.sharedInstance().handle(url as URL!, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: options[UIApplicationOpenURLOptionsKey.annotation])
    }
    

    谷歌文档真糟糕!我使用的是iOS 10,文档中说,只有在使用iOS 8.0或更高版本时,才添加我编写的第二个方法。不知道为什么。我成功地添加了这两种方法:

    // [START openurl]
    func application(_ application: UIApplication,
    open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
      return GIDSignIn.sharedInstance().handle(url, sourceApplication: sourceApplication, annotation: annotation)
    }
    // [END openurl]
    @available(iOS 9.0, *)
    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
    return GIDSignIn.sharedInstance().handle(url,
      sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
      annotation: options[UIApplicationOpenURLOptionsKey.annotation])
    }
    
    -(BOOL)应用程序:(UIApplication*)应用程序
    openURL:(NSURL*)url
    选项:(NSDictionary*)选项{
    BOOL handleGoogleSignIn=[[GIDSignIn sharedInstance]handleURL:url
    sourceApplication:options[UIApplicationOpenUrlOptions SourceApplicationKey]
    注释:选项[UIApplicationOpenURLOptionsAnnotationKey]];
    if(手杖登录){
    返回手柄;
    }
    }
    -(BOOL)应用程序:(UIApplication*)应用程序
    openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication
    注释:(id)注释{
    BOOL handleGoogleSignIn=[[GIDSignIn sharedInstance]handleURL:url
    sourceApplication:sourceApplication
    注释:注释];
    if(手杖登录){
    返回手柄;
    }
    }
    

    如果您使用sourceApplication,则需要编写GoogleSignIn并返回两者。

    我也遇到了同样的问题,请务必在获得解决方案后通知我……您好,使用此方法,我可以通过谷歌登录。但在登录后,我想转到驱动器文件列表。它将我重定向到google.com。你能帮忙吗?