Как расширить область действия разрешения GTMOAuth2ViewControllerTouch
У меня есть приложение, которое использует 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
расширить область действия, но для этого требуется, чтобы пользователь снова ввел учетные данные.
Я ожидаю, что этот контроллер просто запросит одобрение этого нового разрешения.
Как я могу добиться этого поведения? Возможно ли это с помощью https://github.com/google/google-api-objectivec-client/wiki
ОБНОВИТЬ:
Я смог стать ближе с помощью GTMOAuth2ViewControllerTouch
"s swapInCookies
& swapOutCookies
методы..
Для новой установки эти методы снова открывают тот же контроллер (веб-просмотр для входа в систему), и во второй раз он просто запрашивает разрешения, не давая пользователю снова ввести свои учетные данные.
Но проблема в том, что текущее приложение не swapOutCookies
когда вход в систему завершен, поэтому в веб-просмотре нет файлов cookie, поэтому он запрашивает вход в систему, когда предполагается, что пользователь уже вошел в систему.
1 ответ
Вы можете добавлять новые области, используя GIDSignIn
общий экземпляр, позвонив scopes
а потом звонит signIn
запросить согласие. Дополнительную информацию можно найти в разделе " Запрос дополнительных областей" в документации по iOS Google Identity.
Примером для запроса дополнительной области будет
NSString *driveScope = @"https://www.googleapis.com/auth/drive.readonly";
NSArray *currentScopes = [GIDSignIn sharedInstance].scopes;
[GIDSignIn sharedInstance].scopes = [currentScopes arrayByAddingObject:driveScope];
[[GIDSignIn sharedInstance] signIn];