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