Как расширить область действия разрешения 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];
Другие вопросы по тегам