Wenn Ihre Android-App eine der Firebase ML's Cloud APIs verwendet, sollten Sie vor der Einführung Ihrer App in der Produktionsumgebung einige zusätzliche Schritte unternehmen, um unbefugten API-Zugriff zu verhindern.
Für Ihre Produktionsanwendungen müssen Sie dafür sorgen, dass nur authentifizierte Clients auf Cloud-Dienste zugreifen können. Hinweis: Nur Geräte ohne Root-Zugriff können sich mit der beschriebenen Methode authentifizieren.
Anschließend erstellen Sie einen API-Schlüssel, der nur für das Debugging verwendet werden kann und Ihnen während des Testens und der Entwicklung zur Verfügung steht.
1. Produktionsanwendungen bei Firebase registrieren
Registrieren Sie zuerst Ihre Produktionsanwendungen bei Firebase.
Achten Sie darauf, dass Sie die SHA-1-Signaturen Ihrer App haben. Informationen dazu finden Sie unter Client authentifizieren.
Rufen Sie in der Firebase Konsole die Projekteinstellungen 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. Bereich 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 möglich ist:
Öffnen Sie die Seite Anmeldedaten in der Google Cloud Konsole. Wählen Sie bei Aufforderung Ihr Projekt aus.
Öffnen Sie für jeden vorhandenen API-Schlüssel in der Liste die Bearbeitungsansicht.
Wählen Sie im Bereich 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 Bereich API Einschränkungen die Option Schlüssel nicht einschränken ausgewählt ist, kann ein API-Schlüssel standardmäßig 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, funktionieren aber weiterhin für alle APIs, die Sie der Liste API-Einschränkungen hinzugefügt haben.
Wenn Sie in Zukunft weitere APIs aktivieren, müssen Sie sie der API-Einschränkungen Liste für den entsprechenden API-Schlüssel hinzufügen.
3. API-Schlüssel erstellen und verwenden, der nur für das Debugging verwendet werden kann
Erstellen Sie abschließend einen neuen API-Schlüssel, der nur für die Entwicklung verwendet werden kann. Firebase ML kann diesen API-Schlüssel verwenden, um auf Google Cloud Dienste in Umgebungen zuzugreifen, in denen die App Authentifizierung nicht möglich ist, z. B. bei der Ausführung auf Emulatoren.
So erstellen Sie einen neuen API-Schlüssel, der für die Entwicklung verwendet werden kann:
Öffnen Sie die Seite Anmeldedaten in der Google Cloud Konsole. Wählen Sie bei Aufforderung Ihr Projekt aus.
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. Behandeln Sie diesen Schlüssel daher vertraulich.
Damit der neue API-Schlüssel für das Debugging 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
debugaus den Zielquellsätzen auswählen.Fügen Sie im Debug-Manifest die folgende Deklaration hinzu:
<application> <meta-data android:name="com.firebase.ml.cloud.ApiKeyForDebug" android:value="your-debug-api-key" /> </application>
Konfigurieren Sie in Ihrer App Firebase ML so, dass die Zertifikatsfingerabdruck-Abstimmung verwendet wird, um Ihren Client in der Produktionsumgebung zu authentifizieren, und API-Schlüssel (den Debug Schlüssel) nur in Debug-Builds verwendet werden:
Kotlin
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);
Nächste Schritte
In der Checkliste für die Einführung finden Sie Informationen zur Vorbereitung Ihrer App auf die Einführung, wenn Sie andere Firebase-Funktionen verwenden.