iOS:GPPSignInButton始终要求“具有脱机访问权限”权限

iOS:GPPSignInButton始终要求“具有脱机访问权限”权限,第1张

概述我已根据以下内容设置了GPPSignInButton: https://developers.google.com/+/mobile/ios/sign-in#enable_server-side_api_access_for_your_app let googleSignIn = GPPSignIn.sharedInstance() googleSignIn.clientID = Goog 我已根据以下内容设置了GPPSignInbutton:

https://developers.google.com/+/mobile/ios/sign-in#enable_server-side_api_access_for_your_app

let GoogleSignIn = GPPSignIn.sharedInstance()    GoogleSignIn.clIEntID = GoogleClIEntID    GoogleSignIn.attemptSSO = true    GoogleSignIn.homeServerClIEntID = GoogleServerClIEntID    GoogleSignIn.scopes = ["https://www.GoogleAPIs.com/auth/plus.login","https://www.GoogleAPIs.com/auth/plus.profile.emails.read"]    GoogleSignIn.delegate = self    GoogleSignInbutton.colorScheme = kGPPSignInbuttoncolorSchemelight    GoogleSignInbutton.style = kGPPSignInbuttonStyleWIDe

当用户第一次登录时,它要求正确的权限并返回IDToken,该IDToken被转发到服务器并交换为access_token / refresh_token.

但是,在调用GPPSignIn.sharedInstance().signOut()之后,再次登录将始终要求“具有脱机访问”权限.

我已经阅读了一些引用此内容的其他SO帖子,其中大多数引用了URL参数“approval_prompt”和“access_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

我在服务器端有相同的范围(“登录”和“电子邮件”),我无法弄清楚我还需要做什么,所以它并不总是要求获得离线访问权限.

解决方法@H_502_32@ 我知道您使用的是Google的iOS SDK.

您所说的是Google Api的默认行为.

使用以下解决方案,您可以将“approval_prompt = force”和“access_type = offline”参数添加到URL.

解:

为了添加这些参数,您必须修改GTMOAuth2SignIn.m并将“paramsDict”替换为以下NSMutableDictionary:

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并设置错误.

总结

以上是内存溢出为你收集整理的iOS:GPPSignInButton始终要求“具有脱机访问权限”权限全部内容,希望文章能够帮你解决iOS:GPPSignInButton始终要求“具有脱机访问权限”权限所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1044820.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存