Если ваше Android-приложение использует один из облачных API Firebase ML , перед запуском приложения в эксплуатацию вам следует предпринять некоторые дополнительные шаги для предотвращения несанкционированного доступа к API.
Для ваших производственных приложений вам необходимо гарантировать, что доступ к облачным сервисам получат только аутентифицированные клиенты. (Обратите внимание, что аутентификацию с использованием описанного метода могут пройти только устройства без прав root.)
Затем вы создадите API-ключ, предназначенный только для отладки, который можно будет использовать для удобства во время тестирования и разработки.
1. Зарегистрируйте свои производственные приложения в Firebase
Сначала зарегистрируйте свои производственные приложения в Firebase.
Убедитесь, что у вашего приложения есть подписи SHA-1. Подробнее см. в разделе «Аутентификация клиента» .
Перейдите в Firebase , затем выберите вкладку Настройки .
Настройки проекта в консолиПрокрутите страницу вниз до карточки Ваши приложения , затем выберите свое приложение для Android.
Добавьте подпись SHA-1 вашего приложения к информации о нем.
2. Ограничьте область действия ваших ключей API.
Затем настройте существующие ключи API, чтобы запретить доступ к API Cloud Vision:
Откройте страницу «Учётные данные» в консоли Google Cloud . При появлении запроса выберите свой проект.
Для каждого существующего ключа API в списке откройте представление редактирования.
В разделе «Ограничения API» выберите «Ограничить ключ» , а затем добавьте в список все API, к которым должен быть доступ с помощью ключа API. Убедитесь, что API Cloud Vision не включен в этот список.
При настройке ограничений API для ключа API вы явно указываете API, к которым этот ключ имеет доступ. По умолчанию, если в разделе ограничений API выбран параметр «Не ограничивать ключ» , ключ API можно использовать для доступа к любому API, разрешенному для проекта.
Теперь ваши существующие ключи API не будут предоставлять доступ к облачным сервисам машинного обучения, но каждый ключ продолжит работать для любых API, которые вы добавили в свой список ограничений API .
Обратите внимание: если в будущем вы включите какие-либо дополнительные API, вам необходимо добавить их в список ограничений API для соответствующего ключа API.
3. Создайте и используйте API-ключ, предназначенный только для отладки.
Наконец, создайте новый ключ API, который будет использоваться только для разработки. Firebase ML может использовать этот ключ API для доступа к сервисам Google Cloud в средах, где аутентификация приложений невозможна, например, при запуске на эмуляторах.
Создайте новый ключ API, который будет использоваться для разработки:
Откройте страницу «Учётные данные» в консоли Google Cloud . При появлении запроса выберите свой проект.
Нажмите «Создать учётные данные» > «Ключ API» и запишите новый ключ API. Этот ключ позволяет получать доступ к API из неаутентифицированных приложений, поэтому держите его в тайне .
Чтобы гарантировать, что новый ключ API отладки не будет передан вместе с выпущенным приложением, укажите ключ API отладки в файле манифеста Android, который используется только для отладочных сборок:
Если у вас еще нет отладочного манифеста, создайте его, нажав Файл > Создать > Другое > Файл манифеста Android и выбрав
debug
из целевых исходных наборов.В отладочном манифесте добавьте следующее объявление:
<application> <meta-data android:name="com.firebase.ml.cloud.ApiKeyForDebug" android:value="
your-debug-api-key " /> </application>
В своем приложении настройте Firebase ML на использование сопоставления отпечатков сертификатов для аутентификации клиента в рабочей среде и на использование ключей API (ключ отладки) только в отладочных сборках:
val optionsBuilder = FirebaseVisionCloudImageLabelerOptions.Builder() if (!BuildConfig.DEBUG) { // Requires physical, non-rooted device: optionsBuilder.enforceCertFingerprintMatch() } // Set other options. For example: optionsBuilder.setConfidenceThreshold(0.8f) // ... // And lastly: val options = optionsBuilder.build() FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage)
FirebaseVisionCloudImageLabelerOptions.Builder optionsBuilder = new FirebaseVisionCloudImageLabelerOptions.Builder(); if (!BuildConfig.DEBUG) { // Requires physical, non-rooted device: optionsBuilder.enforceCertFingerprintMatch(); } // Set other options. For example: optionsBuilder.setConfidenceThreshold(0.8f); // ... // And lastly: FirebaseVisionCloudImageLabelerOptions options = optionsBuilder.build(); FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage);
Следующие шаги
Информацию о подготовке приложения к запуску при использовании других функций Firebase см. в контрольном списке запуска.