Если ваше приложение для Android использует один из облачных API Firebase ML, прежде чем запускать свое приложение в рабочей среде, вы должны предпринять дополнительные шаги для предотвращения несанкционированного доступа к API.
Для ваших производственных приложений вы убедитесь, что только клиенты, прошедшие проверку подлинности, могут получить доступ к облачным службам. (Обратите внимание, что только нерутированные устройства могут пройти аутентификацию с использованием описанного метода.)
Затем вы создадите ключ API только для отладки, который можно использовать для удобства во время тестирования и разработки.
1. Зарегистрируйте свои рабочие приложения в Firebase.
Сначала зарегистрируйте свои рабочие приложения в Firebase.
Убедитесь, что у вас есть подписи SHA-1 вашего приложения. См. Аутентификация вашего клиента , чтобы узнать, как это сделать.
Перейдите к своим
Настройки проекта в консоли Firebase, затем выберите вкладку Настройки .Прокрутите вниз до карточки «Ваши приложения» , затем выберите свое приложение для Android.
Добавьте подпись SHA-1 вашего приложения к информации вашего приложения.
2. Ограничьте область действия ваших ключей API
Затем настройте существующие ключи API, чтобы запретить доступ к Cloud Vision API:
Откройте страницу учетных данных Google Cloud Console. При появлении запроса выберите свой проект.
Для каждого существующего ключа API в списке откройте режим редактирования.
В разделе ограничений API выберите Ограничить ключ , затем добавьте в список все API, к которым вы хотите, чтобы ключ API имел доступ. Убедитесь, что вы не включили Cloud Vision API.
Когда вы настраиваете ограничения API ключа API, вы явно объявляете API, к которым у ключа есть доступ. По умолчанию, если в разделе ограничений API выбран параметр Не ограничивать ключ , ключ API можно использовать для доступа к любому API, включенному для проекта.
Теперь ваши существующие ключи API не будут предоставлять доступ к облачным службам машинного обучения, но каждый ключ будет продолжать работать для любых API, которые вы добавили в список ограничений API .
Обратите внимание: если вы в будущем включите какие-либо дополнительные API, вы должны добавить их в список ограничений API для соответствующего ключа API.
3. Создайте и используйте ключ API только для отладки
Наконец, создайте новый ключ API, который будет использоваться только для разработки. Firebase ML может использовать этот ключ API для доступа к службам Google Cloud в средах, где аутентификация приложений невозможна, например, при работе на эмуляторах.
Создайте новый ключ API, который будет использоваться для разработки:
Откройте страницу учетных данных Google Cloud Console. При появлении запроса выберите свой проект.
Щелкните Создать учетные данные > Ключ 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+KTX
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.