Catch up on highlights from Firebase at Google I/O 2023. Learn more

Proteggi le credenziali Cloud della tua app Firebase ML per Android

Se la tua app Android utilizza una delle API cloud di Firebase ML, prima di avviare l'app in produzione, dovresti eseguire alcuni passaggi aggiuntivi per impedire l'accesso API non autorizzato.

Per le tue app di produzione, ti assicurerai che solo i client autenticati possano accedere ai servizi cloud. (Si noti che solo i dispositivi non rootati possono eseguire l'autenticazione utilizzando il metodo descritto.)

Quindi, creerai una chiave API di solo debug che puoi usare per comodità durante il test e lo sviluppo.

1. Registra le tue app di produzione con Firebase

Innanzitutto, registra le tue app di produzione con Firebase.

  1. Assicurati di disporre delle firme SHA-1 della tua app. Fare riferimento a Autenticazione del client per sapere come.

  2. Vai alle tue Impostazioni progetto nella console Firebase, quindi seleziona la scheda Impostazioni .

  3. Scorri verso il basso fino alla scheda Le tue app , quindi seleziona la tua app Android.

  4. Aggiungi la firma SHA-1 della tua app alle informazioni della tua app.

2. Limita l'ambito delle tue chiavi API

Successivamente, configura le tue chiavi API esistenti per impedire l'accesso all'API Cloud Vision:

  1. Apri la pagina Credenziali di Google Cloud Console. Quando richiesto, seleziona il tuo progetto.

  2. Per ogni chiave API esistente nell'elenco, apri la visualizzazione di modifica.

  3. Nella sezione Restrizioni API , seleziona Limita chiave , quindi aggiungi all'elenco tutte le API a cui desideri che la chiave API abbia accesso. Assicurati di non includere l'API Cloud Vision.

    Quando configuri le restrizioni 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 , è possibile usare una chiave API 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 tutte le API che hai aggiunto al suo elenco di restrizioni API .

Tieni presente che se abiliti ulteriori API in futuro, dovrai aggiungerle all'elenco delle restrizioni API per la chiave API applicabile.

3. Creare e utilizzare una chiave API di solo 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 durante l'esecuzione su emulatori.

  1. Crea una nuova chiave API da utilizzare per lo sviluppo:

    1. Apri la pagina Credenziali di Google Cloud Console. Quando richiesto, seleziona il tuo progetto.

    2. Fai clic su Crea credenziali > Chiave API e prendi nota della nuova chiave API. Questa chiave consente l'accesso API da app non autenticate, quindi mantieni questa chiave riservata .

  2. Per assicurarti che la nuova chiave API di debug non venga trapelata con la tua app rilasciata, specifica la chiave API di debug in un file manifest Android utilizzato solo per le build di debug:

    1. Se non disponi già di un manifest di debug, creane uno facendo clic su File > Nuovo > Altro > File manifest Android e selezionando debug dai set di origini di destinazione.

    2. Nel manifest di debug, aggiungi la seguente dichiarazione:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
      
  3. Nella tua app, configura Firebase ML per utilizzare la corrispondenza dell'impronta digitale del certificato per autenticare il tuo client in produzione e per utilizzare le chiavi API, la chiave di debug, solo nelle build di debug:

    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);

Prossimi passi

Consulta l' elenco di controllo per l'avvio per informazioni su come preparare l'avvio dell'app quando utilizzi altre funzionalità di Firebase.