Cloud-Anmeldedaten Ihrer Firebase ML Android-App schützen
Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Wenn Ihre Android-App eine der Cloud-APIs von Firebase ML verwendet, sollten Sie vor der Einführung Ihrer App in der Produktionsumgebung zusätzliche Schritte unternehmen, um unbefugten API-Zugriff zu verhindern.
Für Ihre Produktionsanwendungen sorgen Sie dafür, dass nur authentifizierte Clients auf Cloud-Dienste zugreifen können. (Hinweis: Nur nicht gerootete Geräte können sich mit der beschriebenen Methode authentifizieren.)
Anschließend erstellen Sie einen API-Schlüssel, der nur für die Fehlerbehebung verwendet werden kann und den Sie während des Testens und der Entwicklung verwenden können.
1. Produktions-Apps bei Firebase registrieren
Registrieren Sie zuerst Ihre Produktions-Apps bei Firebase.
Sie benötigen die SHA-1-Signaturen Ihrer App. Weitere Informationen finden Sie unter Client authentifizieren.
Rufen Sie in der Firebase-Konsole die Projekteinstellungensettings auf und wählen Sie den Tab Einstellungen aus.
Scrollen Sie nach unten zur Karte Meine Apps und wählen Sie Ihre Android-App aus.
Fügen Sie die SHA-1-Signatur Ihrer App den Informationen Ihrer App hinzu.
2. Umfang Ihrer API-Schlüssel einschränken
Konfigurieren Sie als Nächstes Ihre vorhandenen API-Schlüssel so, dass der Zugriff auf die Cloud Vision API nicht mehr möglich ist:
Öffnen Sie in der Google Cloud-Konsole die Seite Anmeldedaten. Wählen Sie Ihr Projekt aus, wenn Sie dazu aufgefordert werden.
Öffnen Sie für jeden vorhandenen API-Schlüssel in der Liste die Bearbeitungsansicht.
Wählen Sie im Abschnitt API-Einschränkungen die Option Schlüssel einschränken aus und fügen Sie der Liste alle APIs hinzu, auf die der API-Schlüssel Zugriff haben soll. Die Cloud Vision API darf nicht enthalten sein.
Wenn Sie die API-Einschränkungen eines API-Schlüssels konfigurieren, deklarieren Sie explizit die APIs, auf die der Schlüssel Zugriff hat. Wenn im Abschnitt API-Einschränkungen standardmäßig Schlüssel nicht einschränken ausgewählt ist, kann ein API-Schlüssel für den Zugriff auf jede API verwendet werden, die für das Projekt aktiviert ist.
Ihre vorhandenen API-Schlüssel gewähren jetzt keinen Zugriff mehr auf Cloud ML-Dienste. Jeder Schlüssel funktioniert jedoch weiterhin für alle APIs, die Sie der Liste der API-Einschränkungen hinzugefügt haben.
Wenn Sie in Zukunft zusätzliche APIs aktivieren, müssen Sie sie der Liste API-Einschränkungen für den entsprechenden API-Schlüssel hinzufügen.
3. Nur für das Debugging bestimmten API-Schlüssel erstellen und verwenden
Erstellen Sie schließlich einen neuen API-Schlüssel, der nur für die Entwicklung verwendet wird. Firebase ML kann mit diesem API-Schlüssel auf Google Cloud-Dienste in Umgebungen zugreifen, in denen keine App-Authentifizierung möglich ist, z. B. bei der Ausführung auf Emulatoren.
Erstellen Sie einen neuen API-Schlüssel für die Entwicklung:
Öffnen Sie in der Google Cloud-Konsole die Seite Anmeldedaten. Wählen Sie Ihr Projekt aus, wenn Sie dazu aufgefordert werden.
Klicken Sie auf Anmeldedaten erstellen > API-Schlüssel und notieren Sie sich den neuen API-Schlüssel. Mit diesem Schlüssel ist der API-Zugriff von nicht authentifizierten Apps möglich. Bewahren Sie diesen Schlüssel daher vertraulich auf.
Damit der neue Debug-API-Schlüssel nicht mit Ihrer veröffentlichten App weitergegeben wird, geben Sie ihn in einer Android-Manifestdatei an, die nur für Debug-Builds verwendet wird:
Wenn Sie noch kein Debug-Manifest haben, erstellen Sie eines, indem Sie auf Datei > Neu > Sonstiges > Android-Manifestdatei klicken und debug aus den Zielquellsets auswählen.
Fügen Sie dem Debug-Manifest die folgende Deklaration hinzu:
Konfigurieren Sie in Ihrer App Firebase ML so, dass der Zertifikat-Fingerabdruck für die Authentifizierung Ihres Clients in der Produktion verwendet wird und API-Schlüssel (den Debug-Schlüssel) nur in Debug-Builds:
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);
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 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."]]