Защитите облачные учетные данные вашего приложения Firebase ML для Android
Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Если ваше Android-приложение использует один из облачных API Firebase ML , перед запуском приложения в эксплуатацию вам следует предпринять некоторые дополнительные шаги для предотвращения несанкционированного доступа к API.
Для ваших производственных приложений вам необходимо гарантировать, что доступ к облачным сервисам получат только аутентифицированные клиенты. (Обратите внимание, что аутентификацию с использованием описанного метода могут пройти только устройства без прав root.)
Затем вы создадите API-ключ, предназначенный только для отладки, который можно будет использовать для удобства во время тестирования и разработки.
1. Зарегистрируйте свои производственные приложения в Firebase
Сначала зарегистрируйте свои производственные приложения в Firebase.
Убедитесь, что у вашего приложения есть подписи SHA-1. Подробнее см. в разделе «Аутентификация клиента» .
Перейдите в settingsНастройки проекта в консоли 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 из целевых исходных наборов.
В отладочном манифесте добавьте следующее объявление:
В своем приложении настройте Firebase ML на использование сопоставления отпечатков сертификатов для аутентификации клиента в рабочей среде и на использование ключей API (ключ отладки) только в отладочных сборках:
Kotlin
valoptionsBuilder=FirebaseVisionCloudImageLabelerOptions.Builder()if(!BuildConfig.DEBUG){// Requires physical, non-rooted device:optionsBuilder.enforceCertFingerprintMatch()}// Set other options. For example:optionsBuilder.setConfidenceThreshold(0.8f)// ...// And lastly:valoptions=optionsBuilder.build()FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage)
FirebaseVisionCloudImageLabelerOptions.BuilderoptionsBuilder=newFirebaseVisionCloudImageLabelerOptions.Builder();if(!BuildConfig.DEBUG){// Requires physical, non-rooted device:optionsBuilder.enforceCertFingerprintMatch();}// Set other options. For example:optionsBuilder.setConfidenceThreshold(0.8f);// ...// And lastly:FirebaseVisionCloudImageLabelerOptionsoptions=optionsBuilder.build();FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage);
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2025-08-21 UTC."],[],[],null,["\u003cbr /\u003e\n\nIf your Android app uses one of Firebase ML's cloud APIs, before you launch your\napp in production, you should take some additional steps to prevent\nunauthorized API access.\n\nFor your production apps, you will ensure that only authenticated clients can\naccess cloud services. (Note that only non-rooted devices can authenticate using\nthe method described.)\n\nThen, you will create a debug-only API key that you can use for convenience\nduring testing and development.\n\n1. Register your production apps with Firebase\n\nFirst, register your production apps with Firebase.\n\n1. Make sure that you have your app's SHA-1 signatures. Refer to\n [Authenticating your client](//developers.google.com/android/guides/client-auth)\n to learn how.\n\n2. Go to your settings\n *Project settings* in the Firebase console, then select the *Settings*\n tab.\n\n3. Scroll down to the *Your apps* card, then select your Android app.\n\n4. Add your app's SHA-1 signature to your app's information.\n\n2. Restrict the scope of your API keys\n\nNext, configure your existing API keys to disallow access to the Cloud Vision\nAPI:\n\n1. Open the [Credentials](https://console.cloud.google.com/apis/credentials?project=_) page of the\n Google Cloud console. When prompted, select your project.\n\n2. For each existing API key in the list, open the editing view.\n\n3. In the *API restrictions* section, select **Restrict key** , then add to the\n list all of the APIs to which you want the API key to have access. Make sure\n to ***not*** include the Cloud Vision API.\n\n When you configure an API key's *API restrictions* , you are explicitly\n declaring the APIs to which the key has access. **By default, when the *API\n restrictions* section has *Don't restrict key* selected, an API key can be\n used to access any API that is enabled for the project.**\n\nNow, your existing API keys will not grant access to cloud ML services, but each\nkey will continue to work for any APIs that you added to its *API restrictions*\nlist.\n\nNote that if you enable any additional APIs in the future, you must add them to\nthe *API restrictions* list for the applicable API key.\n\n3. Create and use a debug-only API key\n\nFinally, create a new API key to be used only for development. Firebase ML can\nuse this API key to access Google Cloud services in environments where app\nauthentication isn't possible, such as when running on emulators.\n\n1. Create a new API key to be used for development:\n\n 1. Open the [Credentials](https://console.cloud.google.com/apis/credentials?project=_) page of the\n Google Cloud console. When prompted, select your project.\n\n 2. Click **Create credentials \\\u003e API key** and take note of the new API\n key. This key allows API access from unauthenticated apps, so\n **keep this key confidential**.\n\n2. To ensure the new debug API key is not leaked with your released app,\n specify the debug API key in an Android manifest file used only for debug\n builds:\n\n 1. If you don't already have a debug manifest, create one by clicking\n **File \\\u003e New \\\u003e Other \\\u003e Android Manifest File** and selecting `debug`\n from the target source sets.\n\n 2. In the debug manifest, add the following declaration:\n\n ```text\n \u003capplication\u003e\n \u003cmeta-data\n android:name=\"com.firebase.ml.cloud.ApiKeyForDebug\"\n android:value=\"your-debug-api-key\" /\u003e\n \u003c/application\u003e\n ```\n3. In your app, configure Firebase ML to use certificate fingerprint matching to\n authenticate your client in production and to use API keys---the debug\n key---only in debug builds:\n\n Kotlin \n\n ```kotlin\n val optionsBuilder = FirebaseVisionCloudImageLabelerOptions.Builder()\n if (!BuildConfig.DEBUG) {\n // Requires physical, non-rooted device:\n optionsBuilder.enforceCertFingerprintMatch()\n }\n\n // Set other options. For example:\n optionsBuilder.setConfidenceThreshold(0.8f)\n // ...\n\n // And lastly:\n val options = optionsBuilder.build()\n FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage)https://github.com/firebase/snippets-android/blob/391c1646eacf44d2aab3f76bcfa60dfc6c14acf1/mlkit/app/src/main/java/com/google/firebase/example/mlkit/kotlin/MainActivity.kt#L30-L42\n ```\n\n Java \n\n ```java\n FirebaseVisionCloudImageLabelerOptions.Builder optionsBuilder =\n new FirebaseVisionCloudImageLabelerOptions.Builder();\n if (!BuildConfig.DEBUG) {\n // Requires physical, non-rooted device:\n optionsBuilder.enforceCertFingerprintMatch();\n }\n\n // Set other options. For example:\n optionsBuilder.setConfidenceThreshold(0.8f);\n // ...\n\n // And lastly:\n FirebaseVisionCloudImageLabelerOptions options = optionsBuilder.build();\n FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage);https://github.com/firebase/snippets-android/blob/391c1646eacf44d2aab3f76bcfa60dfc6c14acf1/mlkit/app/src/main/java/com/google/firebase/example/mlkit/MainActivity.java#L30-L43\n ```\n\nNext steps\n\nSee the [launch checklist](/support/guides/launch-checklist) for information on\npreparing your app to launch when using other Firebase features."]]