iOS:GPPSignInButton总是要求“输入”;“有离线访问权”;许可
我根据以下内容设置了GPPSignInButton: 当用户第一次登录时,它会请求正确的权限并返回iOS:GPPSignInButton总是要求“输入”;“有离线访问权”;许可,ios,google-login,google-oauth,Ios,Google Login,Google Oauth,我根据以下内容设置了GPPSignInButton: 当用户第一次登录时,它会请求正确的权限并返回idToken,该令牌被转发到服务器并交换为访问令牌/刷新令牌 但是,在调用GPPSignIn.sharedInstance().signOut()后,再次登录将始终要求获得“具有脱机访问”权限 我已经阅读了其他一些SO帖子,其中大部分都引用了URL参数“approval\u prompt”和“access\u type”。鉴于我使用的是iOS SDK,我无法设置这些参数 应用程序在web视图中路
idToken
,该令牌被转发到服务器并交换为访问令牌/刷新令牌
但是,在调用GPPSignIn.sharedInstance().signOut()
后,再次登录将始终要求获得“具有脱机访问”权限
我已经阅读了其他一些SO帖子,其中大部分都引用了URL参数“approval\u prompt”和“access\u type”。鉴于我使用的是iOS SDK,我无法设置这些参数
应用程序在web视图中路由到的url为:
https://accounts.google.com/o/oauth2/auth?gpsdk=1.7.1&audience=<server-client-id>&response_type=code&verifier=94014002&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fplus.login%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fplus.profile.emails.read&gpbtn=1.1&hl=en&redirect_uri=<redirect_uri>&client_id=<client-id>&state=702574
https://accounts.google.com/o/oauth2/auth?gpsdk=1.7.1&audience=&response_type=code&verifier=94014002&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fplus.login%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fplus.profile.emails.read&gpbtn=1.1&hl=en&redirect_uri=&client_id=&state=702574
我在服务器端有相同的作用域(“登录”和“电子邮件”),我不知道我还需要做什么,所以它并不总是要求获得脱机访问权限。我知道您正在使用谷歌的iOS SDK 您所说的是谷歌API的默认行为 使用以下解决方案,您可以向URL添加“approval\u prompt=force”和“access\u type=offline”参数 解决方案: 因此,要添加这些参数,您必须修改GTMOAuth2SignIn.m,并用以下NSMutableDictionary替换“paramsDict”:
NSMutableDictionary *paramsDict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"code", @"response_type",
clientID, @"client_id",
scope, @"scope",
@"force", @"approval_prompt",
@"offline", @"access_type",
nil];
我相信在这之后你的问题会得到解决
更新:
对于GPPSignin类的使用,您应该检查trySilentAuthentication是否可行。
此api检查是否可以在没有用户交互的情况下进行登录
关于trySilentAuthentication的解释
当您调用authenticate时,sdk会在密钥链中为用户保存一个长寿命令牌,以及一个用于进行API调用的短命令牌。调用trySilentAuthentication检查长寿命令牌是否在密钥链中,并生成新的短命令牌。如果成功,则意味着用户之前已在该设备上登录该应用程序,因此您通常希望对此做出适当的响应。如果失败(没有令牌),它将只返回false,或者如果它不能生成短期令牌,它将使用错误集调用finishedWithAuth:error 我通过cocoa pods安装了SDK,并且只能访问标题。有没有别的地方可以抓取这个库,这样我就可以编辑它了?没关系,我是在google.code上找到的。谢谢你的提示,我会看看它是否有效。我研究过这个问题,我不知道如何在仍然使用GPPSignIn类的情况下做到这一点,它提供了SSO,因此它将在有效的google应用程序而不是web视图中打开。想法?我遇到的问题是当用户注销时。如文档所述:“将从密钥链中删除令牌。”。当应用程序启动时,我正在使用“trySilentAuthentication”,如果用户尚未注销,它将正常工作。
NSMutableDictionary *paramsDict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"code", @"response_type",
clientID, @"client_id",
scope, @"scope",
@"force", @"approval_prompt",
@"offline", @"access_type",
nil];