GIDSignInUIDelegate调用方法

时间:2018-10-07 10:33:51

标签: ios google-signin

我在导航堆栈(第二个孩子)上有一个视图控制器。

将控制器设置为GIDSignInDelegate和GIDSignInUIDelegate。

触发登录后,将调用每个预期要调用的委托方法,除了:

func sign(_ signIn: GIDSignIn!, present viewController: UIViewController!)

func sign(_ signIn: GIDSignIn!, dismiss viewController: UIViewController!)

请注意,在viewDidLoad中,我已将视图控制器分配为委托和ui委托。

此外,在关闭Google登录视图后,我当前的视图控制器会自动从导航堆栈(?????)中弹出

是什么原因造成的?

1 个答案:

答案 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