Jeśli Twoja aplikacja na Androida korzysta z jednego z interfejsów API w chmurze Firebase ML, zanim udostępnisz aplikację w wersji produkcyjnej, musisz podjąć dodatkowe działania, aby zapobiec nieautoryzowanemu dostępowi przez interfejs API.
W przypadku aplikacji produkcyjnych musisz zadbać o to, aby dostęp do usług w chmurze mieli tylko uwierzytelnieni klienci. (pamiętaj, że opisaną metodą można uwierzytelnić tylko urządzenia bez dostępu do roota).
Następnie utwórz klucz interfejsu API tylko do debugowania, którego możesz używać podczas testowania i programowania.
1. Rejestrowanie produkcyjnych aplikacji w Firebase
Najpierw zarejestruj produkcyjne wersje aplikacji 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ę Firebase
, przejdź do Ustawień projektu i kliknij kartę Ustawienia.Przewiń w dół do karty Twoje aplikacje, a następnie wybierz aplikację na Androida.
Dodaj podpis SHA-1 aplikacji do informacji o aplikacji.
2. Ograniczanie zakresu działania kluczy interfejsu API
Następnie skonfiguruj istniejące klucze API, aby odmówić dostępu do interfejsu Cloud Vision API:
Otwórz stronę Dane logowania w konsoli Google Cloud. Gdy pojawi się taka prośba, wybierz projekt.
W przypadku każdego klucza API na liście otwórz widok edycji.
W sekcji Ograniczenia interfejsów API wybierz Ogranicz klucz, a następnie dodaj do listy wszystkie interfejsy API, do których chcesz przyznać dostęp kluczowi interfejsu API. Upewnij się, że nie zawiera on interfejsu 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 w sekcji Ograniczenia interfejsu API wybrana jest opcja Nie ograniczaj klucza, klucz interfejsu API może być używany do uzyskiwania 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 API tylko do debugowania
Na koniec utwórz nowy klucz interfejsu API, który będzie używany tylko do celów programistycznych. 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ę taka 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żywanym tylko do kompilacji debugowania:
Jeśli nie masz jeszcze pliku z manifestem debugowania, utwórz go, klikając Plik > Nowy > Inne > Plik manifestu Androida i wybierając
debug
z docelowych zestawów źródeł.W pliku manifestu debugowania dodaj tę deklarację:
<application> <meta-data android:name="com.firebase.ml.cloud.ApiKeyForDebug" android:value="your-debug-api-key" /> </application>
W aplikacji skonfiguruj Firebase ML, aby używać dopasowania odcisku cyfrowego certyfikatu do uwierzytelniania klienta w wersji produkcyjnej i używać kluczy API (klucza debugowania) tylko w kompilacji 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
W liście kontrolnej przed uruchomieniem znajdziesz informacje o przygotowywaniu aplikacji do uruchomienia, gdy korzystasz z innych funkcji Firebase.