Jeśli Twoja aplikacja na Androida używa jednego z interfejsów Cloud API w usłudze Firebase ML, przed opublikowaniem w wersji produkcyjnej, musisz podjąć pewne dodatkowe kroki, aby zapobiec nieautoryzowany dostęp API.
W przypadku aplikacji produkcyjnych będziesz mieć pewność, że tylko uwierzytelnieni klienci mogą dostęp do usług w chmurze. (pamiętaj, że opisaną metodą można uwierzytelniać tylko urządzenia bez dostępu do roota).
Następnie utwórz klucz interfejsu API przeznaczony tylko do debugowania, którego możesz łatwo użyć. podczas testowania i programowania.
1. Rejestrowanie produkcyjnych aplikacji w Firebase
Najpierw zarejestruj swoje aplikacje w wersji produkcyjnej w Firebase.
Upewnij się, że masz podpisy SHA-1 aplikacji. Aby dowiedzieć się, jak to zrobić, zapoznaj się z artykułem Uwierzytelnianie klienta.
Otwórz konsolę
, przejdź do Ustawień projektu i kliknij kartę Ustawienia.Przewiń w dół do karty Twoje aplikacje, a potem wybierz aplikację na Androida.
Dodaj podpis SHA-1 do informacji o aplikacji.
2. Ograniczanie zakresu działania kluczy interfejsu API
Następnie skonfiguruj istniejące klucze interfejsu API, aby zablokować dostęp do Cloud Vision Interfejs API:
Otwórz stronę Dane logowania w konsoli Google Cloud. Gdy pojawi się prośba, wybierz projekt.
Otwórz widok edycji każdego klucza interfejsu API znajdującego się na liście.
W sekcji Ograniczenia interfejsów API wybierz Ogranicz klucz, a potem dodaj do listy wszystkie interfejsy API, do których klucz interfejsu API ma mieć dostęp. Upewnij się, aby nie uwzględniać Cloud Vision API.
Gdy konfigurujesz ograniczenia interfejsu API dotyczące klucza interfejsu API, wyraźnie deklarujesz, do których interfejsów API ma on dostęp. Domyślnie, gdy interfejs API ograniczenia ma wybraną opcję Nie ograniczaj klucza, klucz interfejsu API może być w celu uzyskania dostępu do dowolnego interfejsu API włączonego w projekcie.
Twoje dotychczasowe klucze interfejsu API nie będą już przyznawać dostępu do usług ML w chmurze, ale każdy klucz nadal będzie działać w przypadku interfejsów API dodanych do listy ograniczeń interfejsu API.
Pamiętaj, że jeśli w przyszłości włączysz dodatkowe interfejsy API, musisz je dodać do listy ograniczeń interfejsu API dla odpowiedniego klucza interfejsu API.
3. Tworzenie i używanie klucza interfejsu API tylko do debugowania
Na koniec utwórz nowy klucz interfejsu API, który będzie używany tylko do programowania. Firebase ML może używać tego klucza API do uzyskiwania dostępu do usług Google Cloud w środowiskach, w których uwierzytelnianie aplikacji jest niemożliwe, np. podczas uruchamiania na emulatorach.
Utwórz nowy klucz interfejsu API, który będzie używany na potrzeby programowania:
Otwórz stronę Dane logowania w konsoli Google Cloud. Gdy pojawi się prośba, wybierz projekt.
Kliknij Utwórz dane logowania > Klucz interfejsu API i zapisz nowy klucz interfejsu API. Ten klucz umożliwia dostęp do interfejsu API z niezweryfikowanych aplikacji, dlatego zachowaj go w tajnych informacjach.
Aby mieć pewność, że nowy klucz interfejsu API debugowania nie zostanie ujawniony w opublikowanej aplikacji, określ klucz interfejsu API debugowania w pliku manifestu Androida używanego tylko do debugowania kompilacje:
Jeśli nie masz jeszcze pliku manifestu debugowania, utwórz go, klikając Plik > Nowe > Inne > Plik manifestu Androida i wybieram
debug
ze zbiorów źródłowych.W pliku manifestu debugowania dodaj tę deklarację:
<application> <meta-data android:name="com.firebase.ml.cloud.ApiKeyForDebug" android:value="your-debug-api-key" /> </application>
Skonfiguruj usługę Firebase ML w swojej aplikacji tak, aby używała dopasowywania odcisku cyfrowego certyfikatu w celu: uwierzytelniać klienta w środowisku produkcyjnym i używać kluczy interfejsu API. – tylko w kompilacjach do debugowania:
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);
Dalsze kroki
Zapoznaj się z listą kontrolną wprowadzania na rynek, aby dowiedzieć się więcej przygotowując aplikację do uruchomienia podczas korzystania z innych funkcji Firebase.