谷歌使用 GIDSignin 多次登录

Posted

技术标签:

【中文标题】谷歌使用 GIDSignin 多次登录【英文标题】:Google multiple login using GIDSignin 【发布时间】:2015-11-30 08:06:49 【问题描述】:

我可以通过以下代码使用GIDSignIn 对单个帐户进行身份验证。

    GIDSignIn *googleSignIn = [GIDSignIn sharedInstance];
    googleSignIn.delegate = self;
    googleSignIn.uiDelegate = self;
    googleSignIn.clientID = (NSString*)cGmailAppClientId;
    googleSignIn.scopes = [self getGmailAuthenticationScopes];;
    [googleSignIn signIn];

GIDSignIn 是共享实例。它仅适用于一个帐户。如何添加多个帐户? 应同时访问多个帐户(例如获取访问令牌)。

Related SO question 没有给出正确的想法。

【问题讨论】:

您不能使用 GIDSignIn 来执行此操作,您可能应该通过执行 HTTP 请求自己执行此操作。但是 google 工程师并不是那么简单,你肯定会面临反垃圾邮件的麻烦。为什么您需要在一台个人设备上同时使用多个帐户? 拥有个人和办公室账户的人。(现在大多数人,有两个账户是正常的。对吧?)。这就是为什么。你怎么说,“不能使用 GIDSignIn?”... 是否有任何文档或至少与此相关的论坛问题?如果是,请发布链接.. 我的猜测也和你的想法一样(sharedInstance)。我知道,我们可以为此做转换概念。但我的要求是,我必须为所有人负责。无论如何感谢您的想法 (sharedInstance)。 我在GIDSignIn 上的经验表明,令牌信息存储在钥匙串中,您无法自己设置不同的令牌,因为GIDSignIn 是从钥匙串本身读取的,因此您的任务可能是不可能的使用谷歌的 ios sdk。 你试过两个不同的GIDSignIn ---> signIn吗?(即我们自己的对象而不是单例对象)它将在钥匙串中保存两个令牌。但问题是如果GIDSignIn 对象被破坏,我们如何检索这两个令牌? 【参考方案1】:

我不认为GIDSignIn 支持多个帐户。虽然理论上您可以实例化 sharedInstance 以外的实例,但一次只能将一个授权保留到 iOS 钥匙串。 (该库需要多个密钥来保存多个授权,但是如果您实例化多个实例,它如何知道冷启动后哪个是哪个?)

幸运的是,有 Google's GTMAppAuth 可以实现相同目的的替代库。它比GIDSignIn 使用起来要复杂一些,但通常以相同的方式工作。主要区别在于 1) 您可以一次创建多个授权,以及 2) 您可以使用您选择的密钥将它们持久保存到 iOS 钥匙串中。如果您对访问 Gmail 特别感兴趣,那么these steps from the popular MailCore2 library 可能会有所帮助。

听起来from this thread 好像这些库由公司内的不同团队提供支持,但我怀疑它们需要一段时间才能融合,如果有的话。

【讨论】:

以上是关于谷歌使用 GIDSignin 多次登录的主要内容,如果未能解决你的问题,请参考以下文章

从 ios 扩展中检索谷歌用户

使用带有护照和续集的谷歌社交登录时多次执行查询

您必须指定 |clientID|对于 |GIDSignIn|尝试使用 Google 登录时出错

使用 GIDSignIn 登录时出现“没有 URL 方案 com-google-gidconsent 的注册处理程序”错误

尝试使用谷歌登录包登录谷歌 - Flutter

“登录谷歌” eclipse kepler 按钮无法打开谷歌登录窗口?