Proteggi le credenziali Cloud della tua app per Android Firebase ML
Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.
Se la tua app per Android utilizza una delle API cloud di Firebase ML, prima di avviarla in produzione, devi adottare alcune misure aggiuntive per impedire l'accesso non autorizzato all'API.
Per le tue app di produzione, ti assicurerai che solo i client autenticati possano accedere ai servizi cloud. Tieni presente che solo i dispositivi non rooted possono eseguire l'autenticazione utilizzando il metodo descritto.
Poi creerai una chiave API solo per il debug che potrai utilizzare per comodità durante i test e lo sviluppo.
1. Registrare le app di produzione con Firebase
Innanzitutto, registra le tue app di produzione con Firebase.
Assicurati di avere le firme SHA-1 della tua app. Per scoprire come fare, consulta la sezione Autenticare il cliente.
Vai alle impostazioni del progetto in settings Play Console, quindi seleziona la scheda Impostazioni.Firebase
Scorri verso il basso fino alla scheda Le tue app, quindi seleziona la tua app per Android.
Aggiungi la firma SHA-1 della tua app alle informazioni dell'app.
2. Limitare l'ambito delle chiavi API
Successivamente, configura le chiavi API esistenti per impedire l'accesso all'API Cloud Vision:
Apri la pagina Credenziali della console Google Cloud. Quando richiesto, seleziona il progetto.
Per ogni chiave API esistente nell'elenco, apri la visualizzazione di modifica.
Nella sezione Restrizioni delle API, seleziona Limita chiave, quindi aggiungi all'elenco tutte le API a cui vuoi che la chiave API abbia accesso. Assicurati di non includere l'API Cloud Vision.
Quando configuri le restrizioni delle API di una chiave API, dichiari esplicitamente le API a cui la chiave ha accesso. Per impostazione predefinita, quando nella sezione Restrizioni API è selezionata l'opzione Non limitare la chiave, una chiave API può essere utilizzata per accedere a qualsiasi API abilitata per il progetto.
Ora, le tue chiavi API esistenti non concederanno l'accesso ai servizi cloud ML, ma ogni chiave continuerà a funzionare per le API che hai aggiunto al suo elenco di limitazioni API.
Tieni presente che se in futuro abiliti altre API, devi aggiungerle all'elenco delle limitazioni API per la chiave API applicabile.
3. Creare e utilizzare una chiave API solo per il debug
Infine, crea una nuova chiave API da utilizzare solo per lo sviluppo. Firebase ML può utilizzare questa chiave API per accedere ai servizi Google Cloud in ambienti in cui l'autenticazione dell'app non è possibile, ad esempio quando viene eseguita su emulatori.
Crea una nuova chiave API da utilizzare per lo sviluppo:
Apri la pagina Credenziali della console Google Cloud. Quando richiesto, seleziona il progetto.
Fai clic su Crea credenziali > Chiave API e prendi nota della nuova chiave API. Questa chiave consente l'accesso all'API da app non autenticate, quindi mantienila riservata.
Per assicurarti che la nuova chiave API di debug non venga divulgata con l'app rilasciata, specifica la chiave API di debug in un file manifest Android utilizzato solo per le build di debug:
Se non hai già un manifest di debug, creane uno facendo clic su File > Nuovo > Altro > File manifest Android e selezionando debug dai set di origini di destinazione.
Nel manifest di debug, aggiungi la seguente dichiarazione:
Nella tua app, configura Firebase ML in modo che utilizzi la corrispondenza delle impronte dei certificati per autenticare il client in produzione e utilizzi le chiavi API, ovvero la chiave di debug, solo nelle build di debug:
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);
Consulta l'elenco di controllo per il lancio per informazioni sulla preparazione della tua app al lancio quando utilizzi altre funzionalità di Firebase.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 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."]]