Если ваше 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 — ключа отладки — только в отладочных сборках:
Kotlin
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)
Java
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 см. в контрольном списке запуска .