谷歌使用 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 多次登录的主要内容,如果未能解决你的问题,请参考以下文章
您必须指定 |clientID|对于 |GIDSignIn|尝试使用 Google 登录时出错
使用 GIDSignIn 登录时出现“没有 URL 方案 com-google-gidconsent 的注册处理程序”错误