如何扩展权限范围GTMOAuth2ViewControllerTouch

时间:2016-01-26 13:59:59

标签: ios google-calendar-api google-api-objc-client

我有一个使用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中,因此它要求登录,当用户被认为时已登录。

1 个答案:

答案 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];