我有一个使用GTMOAuth2ViewControllerTouch
进行登录的应用程序。
最初范围仅使用https://www.googleapis.com/auth/userinfo.email
,因此用户已使用此权限登录。
我想要求https://www.googleapis.com/auth/calendar
所以当它从钥匙串中检索auth对象时:
GTMOAuth2Authentication *auth = [GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:keychainItemName
clientID:clientID
clientSecret:clientSecret];
并且此新权限不在auth
对象的范围内,我尝试再次提供GTMOAuth2ViewControllerTouch
以扩展范围,但它需要用户再次输入凭据。
我希望这个控制器只是要求批准这个新的许可。
我该如何实现这种行为?可以使用google-api-objectivec-client
更新:
使用GTMOAuth2ViewControllerTouch
的{{1}}& swapInCookies
方法..
对于新安装,这些方法将再次打开相同的控制器(用于登录的webview),第二次只是请求权限,使用户远离再次输入他的凭据。
但现在的问题是当前应用程序,登录完成时不swapOutCookies
,因此没有cookie可以交换到webview中,因此它要求登录,当用户被认为时已登录。
答案 0 :(得分:0)
您可以使用GIDSignIn
共享实例通过调用scopes
附加新范围,然后调用signIn
来请求同意。可以在iOS Google Identity文档中的Requesting additional scopes上找到更多信息。
提供请求额外范围的示例将是
NSString *driveScope = @"https://www.googleapis.com/auth/drive.readonly";
NSArray *currentScopes = [GIDSignIn sharedInstance].scopes;
[GIDSignIn sharedInstance].scopes = [currentScopes arrayByAddingObject:driveScope];
[[GIDSignIn sharedInstance] signIn];