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