谷歌登录不适用于 iOS 10

Posted

技术标签:

【中文标题】谷歌登录不适用于 iOS 10【英文标题】:Google SignIn not working for iOS 10 【发布时间】:2018-03-21 17:58:02 【问题描述】:

我已将GoogleSinIn APISwift 4.0 集成到我的项目中。它正在ios 11.0 上运行,但是当我在iOS 10.0 上进行相同测试时,它会在Safari 浏览器或设备上打开Google 登录页面,并在成功签名后打开Google 搜索页面.

    当我点击下面显示的GoogleSignIn 按钮时,它会打开下一张图片中显示的浏览器。

    然后我填写凭据。

    登录成功后,重定向到Google页面,而不是应用页面。

【问题讨论】:

我也遇到了同样的问题,当你得到解决方案时请告诉我... 【参考方案1】:

你必须在你的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])

【讨论】:

【参考方案2】:

检查你的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)

【讨论】:

嗨,用这种方法我可以谷歌登录。但登录后,我想去驱动器文件列表。它正在将我重定向到 google.com 。你能帮忙吗?【参考方案3】:

Google 文档很烂!我正在使用 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])

【讨论】:

【参考方案4】:

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

我之前使用的是:

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

【讨论】:

【参考方案5】:
- (BOOL)application:(UIApplication *)application
        openURL:(NSURL *)url
        options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options 


    BOOL handleGoogleSignIn = [[GIDSignIn sharedInstance] handleURL:url
                                              sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                                                         annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
    if (handleGoogleSignIn) 
        return handleGoogleSignIn;
    


- (BOOL)application:(UIApplication *)application
        openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication
     annotation:(id)annotation 

    BOOL handleGoogleSignIn = [[GIDSignIn sharedInstance] handleURL:url
                           sourceApplication:sourceApplication
                                  annotation:annotation];
    if (handleGoogleSignIn) 
        return handleGoogleSignIn;
    

如果你使用 sourceApplication ,你需要写 GoogleSignIn return both。

【讨论】:

以上是关于谷歌登录不适用于 iOS 10的主要内容,如果未能解决你的问题,请参考以下文章

谷歌登录不适用于 Play Store 上的生产 apk。(在 Playstore 上发布 apk)

通过 Facebook 登录不适用于我的 iOS 应用程序 [重复]

Google 登录不适用于已发布的应用

C++Builder TWebBrowser 不适用于 Google OAuth 登录

上传到 Play 商店时,Google 登录不适用于应用

IOS中的Facebook登录适用于模拟器,但不适用于安装了本机应用程序的设备