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

Настройка App Flip на основе OAuth
В следующих разделах описываются предварительные требования для App Flip на основе OAuth и способы настройки проекта App Flip в консоли действий.
Создайте действие «умный дом» и настройте сервер OAuth 2.0.
Прежде чем вы сможете настроить App Flip, вам необходимо сделать следующее:
- Настройте сервер OAuth 2.0. Дополнительные сведения о настройке сервера OAuth см. в разделе Реализация сервера OAuth 2.0 .
- Создать действие. Чтобы создать действие, следуйте инструкциям в разделе Создание проекта действий .
Настройте App Flip в консоли действий.
В следующем разделе описывается, как настроить App Flip в консоли действий .
- Заполните все поля под информацией о клиенте OAuth. (Если App Flip не поддерживается, в качестве запасного варианта используется обычный OAuth.)
- В разделе Использовать приложение для привязки аккаунта (необязательно) установите флажок Включить для Android.
- Заполните следующие поля:
- Идентификатор приложения. Идентификатор приложения — это уникальный идентификатор, который вы устанавливаете для своего приложения.
- Подпись приложения. Приложения для Android должны быть «подписаны» сертификатом открытого ключа, прежде чем их можно будет установить. Сведения о получении подписи вашего приложения см. в разделе Аутентификация вашего клиента .
- Цель авторизации. В этом поле введите строку, определяющую ваше намерение.
- Если вы хотите дополнительно настроить клиент, добавьте области и щелкните Добавить область в разделе Настроить клиент (необязательно).
- Щелкните Сохранить.
Реализуйте App Flip в своих приложениях для Android
Чтобы внедрить App Flip, вам нужно изменить код авторизации пользователя в вашем приложении, чтобы он принимал ссылку на контент от Google.
OAuth-based App Flip linking (App Flip) inserts your Android app into the Google Account Linking flow. A traditional account linking flow requires the user to enter their credentials in the browser. The use of App Flip defers user sign-in to your Android app, which allows you to leverage existing authorizations. If the user is signed in to your app, they don't need to re-enter their credentials to link their account. A minimal amount of code changes are required to implement App Flip on your Android app.
In this document, you learn how to modify your Android app to support App Flip.
Try the sample
The App Flip linking sample app demonstrates an App Flip-compatible account linking integration on Android. You can use this app to verify how to respond to an incoming App Flip intent from Google mobile apps.
The sample app is preconfigured to integrate with the App Flip Test Tool for Android, which you can use to verify your Android app's integration with App Flip before you configure account linking with Google. This app simulates the intent triggered by Google mobile apps when App Flip is enabled.
How it works
The following steps are required to carry out an App Flip integration:
- The Google app checks if your app is installed on the device using its package name.
- The Google app uses a package signature check to validate that the installed app is the correct app.
- The Google app builds an intent to start a designated activity in your app. This intent includes additional data required for linking. It also checks to see if your app supports App Flip by resolving this intent through the Android framework.
- Your app validates that the request is coming from the Google app. To do so, your app checks the package signature and the provided client ID.
- Your app requests an authorization code from your OAuth 2.0 server. At the end of this flow, it returns either an authorization code or an error to the Google app.
- The Google app retrieves the result and continues with account linking. If an authorization code is provided, the token exchange happens server-to-server, the same way it does in the browser-based OAuth linking flow.
Modify your Android app to support App Flip
To support App Flip, make the following code changes to your Android app:
Add an
<intent-filter>
to yourAndroidManifest.xml
file with an action string that matches the value you entered in the App Flip Intent field.<activity android:name="AuthActivity"> <!-- Handle the app flip intent --> <intent-filter> <action android:name="INTENT_ACTION_FROM_CONSOLE"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
Validate the calling app's signature.
private fun verifyFingerprint( expectedPackage: String, expectedFingerprint: String, algorithm: String ): Boolean { callingActivity?.packageName?.let { if (expectedPackage == it) { val packageInfo = packageManager.getPackageInfo(it, PackageManager.GET_SIGNATURES) val signatures = packageInfo.signatures val input = ByteArrayInputStream(signatures[0].toByteArray()) val certificateFactory = CertificateFactory.getInstance("X509") val certificate = certificateFactory.generateCertificate(input) as X509Certificate val md = MessageDigest.getInstance(algorithm) val publicKey = md.digest(certificate.encoded) val fingerprint = publicKey.joinToString(":") { "%02X".format(it) } return (expectedFingerprint == fingerprint) } } return false }
Extract the client ID from the intent parameters and verify that the client ID matches the expected value.
private const val EXPECTED_CLIENT = "<client-id-from-actions-console>" private const val EXPECTED_PACKAGE = "<google-app-package-name>" private const val EXPECTED_FINGERPRINT = "<google-app-signature>" private const val ALGORITHM = "SHA-256" ... override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val clientId = intent.getStringExtra("CLIENT_ID") if (clientId == EXPECTED_CLIENT && verifyFingerprint(EXPECTED_PACKAGE, EXPECTED_FINGERPRINT, ALGORITHM)) { // ...authorize the user... } }
Upon successful authorization, return the resulting authorization code back to Google.
// Successful result val data = Intent().apply { putExtra("AUTHORIZATION_CODE", authCode) } setResult(Activity.RESULT_OK, data) finish()
If an error occurred, return an error result instead.
// Error result val error = Intent().apply { putExtra("ERROR_TYPE", 1) putExtra("ERROR_CODE", 1) putExtra("ERROR_DESCRIPTION", "Invalid Request") } setResult(-2, error) finish()
Content of the launch intent
The Android intent that launches your app includes the following fields:
CLIENT_ID
(String
): Googleclient_id
registered under your app.SCOPE
(String[]
): A list of scopes requested.REDIRECT_URI
(String
): The redirect URL.
Content of the response data
The data returned to the Google app is set in your app by calling setResult()
.
This data includes the following:
AUTHORIZATION_CODE
(String
): The authorization code value.resultCode
(int
): Communicates the success or failure of the process and takes one of the following values:Activity.RESULT_OK
: Indicates success; an authorization code is returned.Activity.RESULT_CANCELLED
: Signals that the user has cancelled the process. In this case, the Google app will attempt account linking using your authorization URL.-2
: Indicates that an error has occurred. Different types of errors are described below.
ERROR_TYPE
(int
): The type of error, which takes one of the following values:1
: Recoverable error: The Google app will attempt account linking using the authorization URL.2
: Unrecoverable error: The Google app aborts account linking.3
: Invalid or missing request parameters.
ERROR_CODE
(int
): An integer representing the nature of the error. To see what each error code means, refer to the table of error codes.ERROR_DESCRIPTION
(String
, optional): Human-readable status message describing the error.
A value for the AUTHORIZATION_CODE
is expected when
resultCode == Activity.RESULT_OK
. In all other cases, the value for
AUTHORIZATION_CODE
needs to be empty. If resultCode == -2
, then the
ERROR_TYPE
value is expected to be populated.
Table of error codes
The table below shows the different error codes and whether each is a recoverable or unrecoverable error:
Error code | Meaning | Recoverable | Unrecoverable |
---|---|---|---|
1 |
INVALID_REQUEST |
✔ | |
2 |
NO_INTERNET_CONNECTION |
✔ | |
3 |
OFFLINE_MODE_ACTIVE |
✔ | |
4 |
CONNECTION_TIMEOUT |
✔ | |
5 |
INTERNAL_ERROR |
✔ | |
6 |
AUTHENTICATION_SERVICE_UNAVAILABLE |
✔ | |
8 |
CLIENT_VERIFICATION_FAILED |
✔ | |
9 |
INVALID_CLIENT |
✔ | |
10 |
INVALID_APP_ID |
✔ | |
11 |
INVALID_REQUEST |
✔ | |
12 |
AUTHENTICATION_SERVICE_UNKNOWN_ERROR |
✔ | |
13 |
AUTHENTICATION_DENIED_BY_USER |
✔ | |
14 |
CANCELLED_BY_USER |
✔ | |
15 |
FAILURE_OTHER |
✔ | |
16 |
USER_AUTHENTICATION_FAILED |
✔ |
For all error codes, you must return the error result via setResult
to
ensure the appropriate fallback is triggered.
Протестируйте приложение Flip на своем устройстве
Теперь, когда вы создали действие и настроили App Flip на консоли и в своем приложении, вы можете протестировать App Flip на своем мобильном устройстве. Вы можете использовать приложение Google Assistant или приложение Google Home, чтобы протестировать App Flip.
Чтобы протестировать App Flip из приложения Assistant, выполните следующие действия:
- Перейдите в консоль Actions и выберите свой проект.
- Нажмите « Тест» в верхней части навигации.
- Запустите процесс привязки учетной записи из приложения Assistant:
- Откройте приложение Google Ассистент .
- Щелкните Настройки .
- На вкладке «Помощник» нажмите « Управление домом».
- Нажмите Добавить(+) .
- Выберите действие из списка поставщиков. Он будет иметь префикс «[test]» в списке. Когда вы выбираете действие [test] из списка, оно должно открыть ваше приложение.
- Убедитесь, что ваше приложение запущено, и начните тестирование процесса авторизации.
Чтобы протестировать App Flip из приложения Home, выполните следующие действия:
- Перейдите в консоль Actions и выберите свой проект.
- Нажмите « Тест» в верхней части навигации.
- Запустите процесс привязки учетной записи из приложения Home:
- Откройте приложение Google Home .
- Нажмите кнопку + .
- Щелкните Настроить устройство .
- Нажмите Что-то уже настроено?
- Выберите действие вашего умного дома из списка провайдеров. Он будет иметь префикс «[test]» в списке. Когда вы выбираете действие [test] из списка, оно должно открыть ваше приложение.
- Убедитесь, что ваше приложение запущено, и начните тестирование процесса авторизации.