После реализации OAuth 2.0 вы можете настроить App Flip на основе OAuth, чтобы пользователи iOS могли быстрее связывать свои аккаунты в вашей системе аутентификации с аккаунтами Google. В следующих разделах описано, как разработать и реализовать App Flip для интеграции Cloud-to-cloud на iOS.
Рекомендации по проектированию
В этом разделе описаны требования к дизайну и рекомендации для экрана согласия на привязку учетной записи App Flip. После того, как Google вызовет ваше приложение, оно отобразит пользователю экран согласия.
Требования
- Вам потребуется подтверждение авторизации от Google, например: «После установления соединения Google получит разрешение на управление вашими устройствами».
- Необходимо сообщить пользователю, что его учетная запись привязывается к Google, а не к конкретному продукту Google, такому как Google Home или Google Assistant.
- На экране согласия необходимо четко сформулировать призыв к действию и использовать формулировку «Согласен и связал» для обозначения действия по связыванию. Это необходимо, поскольку пользователи должны понимать, какие данные им необходимо предоставить Google для связывания своих учетных записей.
- Необходимо предоставить пользователям возможность вернуться назад, отклонить или отменить действие, если они решат не переходить по ссылке. Для отмены используйте словосочетание «Отмена».
- Необходимо реализовать следующий алгоритм действий: после нажатия кнопки «Согласиться и связать» необходимо отобразить сообщение об успешном связывании и автоматически перенаправить пользователя обратно в приложение Google Home. Теперь пользователь должен увидеть связанное устройство в приложении Google Home после выполнения вашего действия. После нажатия кнопки «Отмена» необходимо перенаправить пользователя обратно в приложение Google Home.
Рекомендации
Мы рекомендуем вам сделать следующее:
Отобразите политику конфиденциальности Google. Включите ссылку на политику конфиденциальности Google на экране согласия.
Данные, которыми необходимо поделиться. Используйте ясный и лаконичный язык, чтобы сообщить пользователю, какие его данные Google запрашивает и почему.
Возможность отвязать аккаунт. Предоставьте пользователям механизм для отвязки аккаунта, например, ссылку на настройки их учетной записи на вашей платформе. В качестве альтернативы вы можете добавить ссылку на учетную запись Google, где пользователи смогут управлять связанным аккаунтом.
Возможность смены учетной записи пользователя. Предложите пользователям способ смены учетных записей. Это особенно полезно, если у пользователей обычно несколько учетных записей.
- Если пользователю необходимо закрыть экран согласия для переключения между учетными записями, отправьте в Google устранимую ошибку, чтобы пользователь мог войти в нужную учетную запись с помощью привязки OAuth и неявного потока аутентификации.
Добавьте свой логотип. Отобразите логотип вашей компании на экране согласия. Используйте свои рекомендации по стилю для размещения логотипа. Если вы также хотите отобразить логотип Google, см. раздел «Логотипы и товарные знаки» .

Настройка для App Flip на основе OAuth
В следующих разделах описаны предварительные требования для переключения аккаунтов на основе OAuth и настройка проекта переключения аккаунтов в Google Home Developer Console.
Создайте интеграцию типа "облако – облако" и настройте сервер OAuth 2.0
Прежде чем настраивать App Flip, выполните следующие действия:
- Настройте сервер OAuth 2.0. Подробнее о том, как настроить сервер OAuth…
- Создайте интеграцию Cloud-to-Cloud. Чтобы создать интеграцию, следуйте инструкциям в статье Как создать облачную интеграцию.
Как настроить переключение аккаунтов в Developer Console
В этом разделе описывается, как настроить переключение аккаунтов в Developer Console.
- Заполните все поля в разделе Информация о клиенте OAuth. Если App Flip не поддерживается, используется обычный протокол OAuth.
- В разделе Использовать приложение для связывания аккаунтов(необязательно) установите флажок Включить для iOS.
- Заполните поле Универсальная ссылка. Подробнее об универсальных ссылках см. Разрешение приложениям и веб-сайтам ссылаться на ваш контент.
- Если вы хотите настроить клиент, добавьте области действия и нажмите Добавить область действия в разделе Настройте клиент (необязательно).
- Нажмите Сохранить.
Теперь вы можете перейти к следующему разделу, чтобы реализовать App Flip в приложении для iOS.
Как реализовать App Flip в нативных приложениях
Чтобы реализовать App Flip, вам нужно изменить код авторизации пользователя в приложении, чтобы он принимал ссылку на контент от Google.
Связывание аккаунтов на основе OAuth (переключение аккаунтов) позволяет пользователю приложения Google открыть ваше приложение iOS и связать аккаунты. Чтобы реализовать эту функцию, вам нужно внести небольшие изменения в код приложения для iOS.
В этом документе рассказывается, как изменить приложение для iOS, чтобы оно поддерживало переключение аккаунтов.
Попробуйте пример
Пример приложения с переключением аккаунтов демонстрирует интеграцию связывания аккаунтов на iOS, совместимую с переключением аккаунтов. С помощью этого приложения вы можете проверить, как реагировать на входящую универсальную ссылку переключения аккаунтов из мобильных приложений Google.
Пример приложения предварительно настроен для интеграции с инструментом тестирования переключения аккаунтов для iOS, который можно использовать для проверки интеграции приложения iOS с переключением аккаунтов перед настройкой связи аккаунтов с Google. Это приложение имитирует универсальную ссылку, которая активируется мобильными приложениями Google, когда включено переключение аккаунтов.
Принцип работы
Ниже описаны шаги, которые выполняют приложение Google и ваше приложение при переключении аккаунтов.
Приложение Google пытается открыть универсальную ссылку вашего приложения. Если приложение установлено на устройстве пользователя и связано с универсальной ссылкой, то оно откроется. Подробнее о поддержке универсальных ссылок…
Приложение проверяет, соответствуют ли параметры
client_idиredirect_uri, закодированные во входящем URL, ожидаемой универсальной ссылке Google.Приложение запрашивает код авторизации у сервера OAuth2. В конце этого процесса ваше приложение возвращает приложению Google код авторизации или ошибку. Для этого оно открывает универсальную ссылку Google с добавленными параметрами для кода авторизации или ошибки.
Приложение Google обрабатывает входящую универсальную ссылку Google и продолжает выполнение остальных действий. Если код авторизации указан, связь устанавливается сразу. Обмен токенами происходит между серверами, как и в случае с браузерным протоколом OAuth. Если возвращается код ошибки, процесс связывания продолжается с использованием альтернативных вариантов.
Измените приложение для iOS, чтобы оно поддерживало переключение аккаунтов
Чтобы обеспечить поддержку переключения аккаунтов, внесите в код приложения для iOS следующие изменения:
- Обработайте
NSUserActivityTypeBrowsingWebв делегате приложения. - Извлеките из URL параметры
redirect_uriиstate, чтобы использовать их в дальнейшем. - Убедитесь, что
redirect_uriсоответствует этому формату:https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
Убедитесь, что идентификатор клиента соответствует ожидаемому значению. Используйте следующий пример кода:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let incomingURL = userActivity.webpageURL, let components = URLComponents(url: incomingURL, resolvingAgainstBaseURL: false), let params = components.queryItems else { return false } if let clientId = params.filter({$0.name == "client_id"}).first?.value, let state = params.filter({$0.name == "state"}).first?.value, let redirectUri = params.filter({$0.name == "redirect_uri"}).first?.value { // Save the redirect_uri and state for later... // Verify the client id return (clientId == GOOGLE_CLIENT_ID) } else { // Missing required parameters return false } }После успешной авторизации вызовите URI переадресации с кодом авторизации. Используйте следующий пример кода:
func returnAuthCode(code: String, state: String, redirectUri: String) { var redirectURL = URL(string: redirectUri) var components = URLComponents(url: redirectURL, resolvingAgainstBaseURL: false) // Return the authorization code and original state let paramAuthCode = URLQueryItem(name: "code", value: code) let paramState = URLQueryItem(name: "state", value: state) components?.queryItems = [paramAuthCode, paramState] if let resultURL = components?.url { UIApplication.shared.open( resultURL, options: [UIApplicationOpenURLOptionUniversalLinksOnly : true], completionHandler: nil) } }Если произошла ошибка, прикрепите к URI перенаправления результат ошибки. Используйте следующий пример кода:
func returnError(redirectUri: String) { var redirectURL = URL(string: redirectUri) var components = URLComponents(url: redirectURL, resolvingAgainstBaseURL: false) // Return the authorization code and original state let paramError = URLQueryItem(name: "error", value: "invalid_request") let paramDescription = URLQueryItem(name: "error_description", value: "Invalid Request") components?.queryItems = [paramError, paramDescription] if let resultURL = components?.url { UIApplication.shared.open( resultURL, options: [UIApplicationOpenURLOptionUniversalLinksOnly : true], completionHandler: nil) } }
Параметры запроса для универсальной ссылки приложения
Когда универсальная ссылка открывается в приложении Google, она содержит следующие параметры запроса:
client_id(String) –client_idGoogle, зарегистрированный в вашем приложении.scope(List of String) – список запрошенных областей действия, разделенных пробелами.state(String) – одноразовый код, используемый Google для проверки того, что результат авторизации является ответом на исходящий запрос Google.redirect_uri(String) – универсальная ссылка Google. URI для открытия приложения Google и передачи результатов.
Параметры запроса для универсальной ссылки Google
Параметры, используемые при успешном возврате результата авторизации:
code(String) – значение кода авторизации, если он доступен.state(String) – точное значение, полученное из входящей универсальной ссылки.
Параметры, используемые при неудачном возврате результата авторизации:
error(String) со следующими значениями:cancelled– устранимая ошибка. Приложение Google попытается связать аккаунты, используя URL авторизации. Например, пользователь не может войти в систему, устройство находится в автономном режиме или истекло время ожидания подключения.unrecoverable– неустранимая ошибка. Например, пользователь пытается связать аккаунты с отключенным аккаунтом.Приложение Google прервет связывание аккаунтов.invalid_request: параметры запроса недействительны или отсутствуют. Эту ошибку можно устранить. Приложение Google попытается связать аккаунты, используя URL авторизации.access_denied– пользователь отклонил запрос согласия. Это неисправимая ошибка, и приложение Google прерывает связывание.
error_description(String, необязательно): удобное сообщение об ошибке.
Для всех типов ошибок необходимо вернуть данные ответа в указанный объект REDIRECT_URI, чтобы обеспечить запуск соответствующего резервного объявления.
Измените конечную точку авторизации, чтобы она поддерживала переключение аккаунтов
Настройте платформу так, чтобы она принимала запросы с использованием URL переадресации Google для переключения аккаунтов:
- Приложение Google Home
https://oauth-redirect.googleusercontent.com/a/com.google.Chromecast.dev https://oauth-redirect.googleusercontent.com/a/com.google.Chromecast.enterprise https://oauth-redirect.googleusercontent.com/a/com.google.Chromecast https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.Chromecast.dev https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.Chromecast.enterprise https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.Chromecast
- Приложение "Google Ассистент"
https://oauth-redirect.googleusercontent.com/a/com.google.OPA.dev https://oauth-redirect.googleusercontent.com/a/com.google.OPA.enterprise https://oauth-redirect.googleusercontent.com/a/com.google.OPA https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.OPA.dev https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.OPA.enterprise https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.OPA
Для Google Home app (GHA) при связывании аккаунтов умного дома используются URL перенаправления com.google.Chromecast. Убедитесь, что ваш сервер авторизации разрешает эти URL.
Убедитесь, что client_id и URL, указанный в параметре redirect_uri, соответствуют ожидаемым значениям при получении запроса. Если проверка клиента не удалась, верните ошибку invalid_request в redirect_uri.
Протестируйте App Flip на своем устройстве
Теперь, когда вы создали интеграцию Cloud-to-cloud и настроили переключение аккаунтов в консоли и в приложении, вы можете протестировать переключение аккаунтов на мобильном устройстве. Протестировать переключение аккаунтов можно в приложении Google Home.
Чтобы протестировать App Flip в приложении Google Home, выполните следующие действия:
- Откройте Developer Console и выберите проект.
- Перейдите в раздел Cloud-to-cloud > Test (Облако-облако > Тестирование).
- Запустите процесс связывания аккаунтов в приложении Google Home:
- Откройте Google Home app (GHA).
- Нажмите кнопку +.
- Нажмите Настроить устройство.
- Нажмите Ранее настроенные устройства.
- Выберите интеграцию в списке поставщиков. В списке перед его названием будет указано "[test]". Если вы выберете тестовую интеграцию из списка, должно открыться ваше приложение.
- Убедитесь, что приложение запущено, и начните тестирование процесса авторизации.