iOS 13 GM 上的 Google 登录失败

Posted

技术标签:

【中文标题】iOS 13 GM 上的 Google 登录失败【英文标题】:Google Sign in fails on iOS 13 GM 【发布时间】:2020-01-14 07:27:54 【问题描述】:

我的应用有一个使用 Google 登录按钮。当我尝试登录 ios 13.0 GM GIDSignInDelegate didSignInForUser:WithError: 返回此错误:

Error Domain=com.google.GIDSignIn Code=-1 "The operation couldn’t be completed. (org.openid.appauth.general error -3.)"

我不知道如何解决这个问题。我正在使用 Google Sign In 5.0.0 作为 Firebase 6.8.1 的一部分。

【问题讨论】:

"org.openid.appauth.general error -3" 实际上意味着流程被取消:github.com/openid/AppAuth-iOS/blob/master/Source/… 但是,这个错误并没有传递给用户,因此您可以正确捕获它。 .. @LukasWürzburger 实际上这就是我在屏幕上看到的:要求用户允许应用程序使用 google com 的警报(“应用程序想要使用 google.com 登录”)短暂显示然后它自己隐藏起来,我得到错误-3。 这很奇怪。您是要呈现另一个视图控制器或类似的东西吗? 不,我只是在调用 GIDSignIn.sharedInstance().signIn()。如果我在 didSignInForUser 委托中设置断点,我可以通过 Google 的登录框架看到从登录到 AppAuth 方法并返回到委托的整个堆栈跟踪。 iOS13之前你是不是也用过GoogleSignIn 5?我认为这是 GoogleSignIn 5 中的错误 【参考方案1】:

我想通了! AppAuth-iOSGoogleSignIn SDK 的开源依赖项,已于 8 月从 1.1.0 更新到 1.2.0,包括对this iOS 13 的支持。所以你需要运行pod update GoogleSignInAppAuth 更新到1.2.0。 GoogleSignIn SDK 本身从 5.0.0 起就没有更新过,这让我很困惑。

【讨论】:

正如我所说,我使用的是 Firebase 6.8.1,而 AppAuth 版本是 1.2.0。但它对我不起作用。 如果您在 8 月 16 日之前一直在使用 GoogleSignIn 5.0.0(Firebase 6.8.1),则在您运行 pod update GoogleSignInpod update Firebase 之前,Podfile.lock 文件可能仍具有 AppAuth 1.1.0。只是这样你就可以仔细检查。还有Firebase刚刚发布6.9.0。你为什么不尝试更新它呢? 但是谷歌发布的二进制 5.0.0 怎么样?它们似乎也不包含修复程序。 @ClausJørgensen GoogleSignIn 5.0.0 不包含修复 - 但 AppAuth 1.2.0 包含,这是它的依赖库之一。 是的,我们现在回滚到以前的版本。等待 Google 发布新的更新。令人失望的是 Google 没有测试 iOS 13。【参考方案2】:

以下是成功获得登录视图的解决方案。在 ViewController 的视图出现后调用 signin 方法,它不会以编程方式关闭。我刚刚在 IOS 13 中实现,它运行良好。

override func viewDidAppear(_ animated: Bool) 
    super.viewDidAppear(animated)
    GIDSignIn.sharedInstance()?.delegate = self
    GIDSignIn.sharedInstance()?.presentingViewController = self
    GIDSignIn.sharedInstance()?.scopes = [kGTLRAuthScopeDrive]
    GIDSignIn.sharedInstance()?.prepareForInterfaceBuilder()
    GIDSignIn.sharedInstance()?.signIn()

【讨论】:

与其将其放入 viewDidiAppear 中,不如在 viewDidLoad 中延迟 (0.0) 秒后调用它。 我敢打赌给定的解决方案就足够了,为什么要通过造成一些延迟来添加更多进程! 可能是由于显示屏幕上的其他交互,viewDidAppear 被多次调用。【参考方案3】:

我下载了 Firebase 6.9.0 SDK zip 并遇到了同样的问题。自述文件表明 AppAuth 的捆绑版本是 1.2.0。我能够通过将 AppAuth 更新到主版本来解决它。

具体来说,我删除了 Firebase 附带的 AppAuth 框架,改为使用 Carthage 构建 AppAuth。

【讨论】:

【参考方案4】:

供其他用户发现此问题时参考:

Google 在 GoogleSignIn v5.0.1 中修复了此问题。将您的应用更新到 iOS 13 时,您可能还需要更新 GoogleSignIn SDK。

【讨论】:

【参考方案5】:

如果您使用 Carthage 的 Firebase 6.9.0,请将 github "openid/AppAuth-iOS" "master" 添加到您的 Cartfile 中的任何 Firebase 条目下方。

【讨论】:

【参考方案6】:

如有错误请见谅。

我认为如果没有定位就会发生此错误。

不仅支持 13,还支持 10。

解决方案,但不要让您的 pod 版本保持最新。

4.4.0.

pod 'GoogleSignIn', '4.4.0'

这个版本没问题。

我预料到了错误。小于

新版本可能会用到一些xcode11.3生成的代码, 所以新的还可以,现有的可能会在 13 点停止处理

【讨论】:

以上是关于iOS 13 GM 上的 Google 登录失败的主要内容,如果未能解决你的问题,请参考以下文章

iOS TouchID 和 FaceID 的使用 - 登录

Flutter with Firebase Google 登录:断言失败 network_image_io.dart

无法在 iOS 13 上更改 Main.storyboard 的名称 [Xcode 11 GM 种子 2]

Xcode 版本 9.1 (9B55) 上传存档失败 - iOS 11.1 - 应用程序必须使用公共 (GM) 版本构建

Google 和 Facebook 登录控制器在 Xcode 11 iOS 13 中以模态方式呈现

tsql 登录失败,但管理工作室可以连接