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-iOS
是GoogleSignIn
SDK 的开源依赖项,已于 8 月从 1.1.0 更新到 1.2.0,包括对this iOS 13 的支持。所以你需要运行pod update GoogleSignIn
将AppAuth
更新到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 GoogleSignIn
或 pod 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 登录失败的主要内容,如果未能解决你的问题,请参考以下文章
Flutter with Firebase Google 登录:断言失败 network_image_io.dart
无法在 iOS 13 上更改 Main.storyboard 的名称 [Xcode 11 GM 种子 2]
Xcode 版本 9.1 (9B55) 上传存档失败 - iOS 11.1 - 应用程序必须使用公共 (GM) 版本构建