我在导航堆栈(第二个孩子)上有一个视图控制器。
将控制器设置为GIDSignInDelegate和GIDSignInUIDelegate。
触发登录后,将调用每个预期要调用的委托方法,除了:
func sign(_ signIn: GIDSignIn!, present viewController: UIViewController!)
和
func sign(_ signIn: GIDSignIn!, dismiss viewController: UIViewController!)
请注意,在viewDidLoad
中,我已将视图控制器分配为委托和ui委托。
此外,在关闭Google登录视图后,我当前的视图控制器会自动从导航堆栈(?????)中弹出
是什么原因造成的?
答案 0 :(得分:0)
如果问题发生在iOS 11及更高版本上,那么我在框架的changelog文档中找到了以下解释:https://cocoapods.org/pods/GoogleSignIn/changelog
2017年10月17日的条目-v4.1.1指出:
修复了GIDSignInUIDelegate的signInWillDispatch:error:为 在iOS 11上未调用。请注意,这既不是 signIn:presentViewController:或signIn:dimissViewController:被调用 在iOS 11上,因为应用程序的视图未显示SFAuthenticationSession 控制器。
根据上述说明,确实调用了signInWillDispatch:error
,但由于存在下面的signIn:presentViewController:
并有意地{strong} 而没有被有意地调用通过专用API消除登录流程,使这两个回调方法无用。我想这些方法仍保留在signIn:dimissViewController:
协议中,仅是为了与未使用SFAuthenticationSession
的iOS 10向后兼容,并且可以在特定的视图控制器中显示和取消登录流程。 / p>
但是,即使在iOS 11及更高版本上从未调用过这两种方法,当委托对象不是GIDSignInUIDelegate
的子类时,仍然需要实现这两种方法,否则应用程序将崩溃。显然,实现什么都不做的方法不是很合逻辑。
顺便说一句,Google在更新文档方面可以做得更好,因为现在它具有误导性:https://developers.google.com/identity/sign-in/ios/api/protocol_g_i_d_sign_in_u_i_delegate-p#a2b265097a3c78e7f82d57b2ccda11c39