Wenn Ihre Android-App eine der Cloud-APIs von Firebase ML verwendet, sollten Sie vor dem Start Ihrer App in der Produktion einige zusätzliche Schritte unternehmen, um unbefugten API-Zugriff zu verhindern.
Für Ihre Produktionsanwendungen stellen Sie sicher, dass nur authentifizierte Clients auf Cloud-Dienste zugreifen können. (Beachten Sie, dass sich nur nicht gerootete Geräte mit der beschriebenen Methode authentifizieren können.)
Anschließend erstellen Sie einen reinen Debug-API-Schlüssel, den Sie zur Vereinfachung beim Testen und Entwickeln verwenden können.
1. Registrieren Sie Ihre Produktions-Apps bei Firebase
Registrieren Sie zunächst Ihre Produktions-Apps bei Firebase.
Stellen Sie sicher, dass Sie über die SHA-1-Signaturen Ihrer App verfügen. Weitere Informationen hierzu finden Sie unter „Authentifizierung Ihres Clients“ .
Gehen Sie in der Firebase-Konsole zu Ihren
und wählen Sie dann die Registerkarte „ Einstellungen“ aus.Scrollen Sie nach unten zur Karte „Ihre Apps“ und wählen Sie dann Ihre Android-App aus.
Fügen Sie die SHA-1-Signatur Ihrer App zu den Informationen Ihrer App hinzu.
2. Beschränken Sie den Umfang Ihrer API-Schlüssel
Konfigurieren Sie als Nächstes Ihre vorhandenen API-Schlüssel, um den Zugriff auf die Cloud Vision API zu verhindern:
Öffnen Sie die Seite „Anmeldeinformationen“ der Google Cloud Console. Wenn Sie dazu aufgefordert werden, wählen Sie Ihr Projekt aus.
Ö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 dann alle APIs zur Liste hinzu, auf die der API-Schlüssel Zugriff haben soll. Stellen Sie sicher, dass Sie die Cloud Vision API nicht einbinden.
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“ die Option „Schlüssel nicht einschränken“ ausgewählt ist, kann standardmäßig ein API-Schlüssel verwendet werden, um auf jede API zuzugreifen, die für das Projekt aktiviert ist.
Jetzt gewähren Ihre vorhandenen API-Schlüssel keinen Zugriff auf Cloud-ML-Dienste, aber jeder Schlüssel funktioniert weiterhin für alle APIs, die Sie zu seiner API-Einschränkungsliste hinzugefügt haben.
Beachten Sie, dass Sie, wenn Sie in Zukunft weitere APIs aktivieren, diese zur API-Einschränkungsliste für den entsprechenden API-Schlüssel hinzufügen müssen.
3. Erstellen und verwenden Sie einen Nur-Debug-API-Schlüssel
Erstellen Sie abschließend einen neuen API-Schlüssel, der nur für die Entwicklung verwendet wird. Firebase ML kann diesen API-Schlüssel verwenden, um in Umgebungen, in denen eine App-Authentifizierung nicht möglich ist, z. B. bei der Ausführung auf Emulatoren, auf Google Cloud-Dienste zuzugreifen.
Erstellen Sie einen neuen API-Schlüssel, der für die Entwicklung verwendet werden soll:
Öffnen Sie die Seite „Anmeldeinformationen“ der Google Cloud Console. Wenn Sie dazu aufgefordert werden, wählen Sie Ihr Projekt aus.
Klicken Sie auf Anmeldeinformationen erstellen > API-Schlüssel und notieren Sie sich den neuen API-Schlüssel. Dieser Schlüssel ermöglicht den API-Zugriff von nicht authentifizierten Apps. Behandeln Sie diesen Schlüssel daher vertraulich .
Um sicherzustellen, dass der neue Debug-API-Schlüssel nicht mit Ihrer veröffentlichten App verloren geht, geben Sie den Debug-API-Schlüssel 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 > Andere > Android-Manifestdatei klicken und
debug
aus 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 Firebase ML in Ihrer App so, dass der Zertifikat-Fingerabdruckabgleich zur Authentifizierung Ihres Clients in der Produktion verwendet wird und API-Schlüssel – der Debug-Schlüssel – nur in Debug-Builds verwendet werden:
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);
Nächste Schritte
Informationen zum Vorbereiten Ihrer App für den Start bei Verwendung anderer Firebase-Funktionen finden Sie in der Start-Checkliste .