Ir para o console

Proteger suas credenciais da nuvem do Kit de ML em apps para Android

Se o aplicativo para Android usa uma das APIs de nuvem do Kit de ML, antes de lançar seu aplicativo na produção, é preciso tomar algumas medidas adicionais para impedir o acesso não autorizado à API.

Para seus aplicativos de produção, você garantirá que apenas clientes autenticados possam acessar os serviços de nuvem. Observe que somente dispositivos sem acesso root podem se autenticar com o método descrito.

Em seguida, você criará uma chave de API somente de depuração que poderá ser usada por conveniência durante o teste e o desenvolvimento.

1. Registre seus aplicativos de produção com o Firebase

Primeiro, registre seus aplicativos de produção com o Firebase.

A maneira mais rápida de fazer isso é vincular seu projeto do Firebase ao seu projeto do Google Play. Você pode fazer isso na seção "Integrações" das configurações do seu projeto no Console do Firebase.

Ao vincular seus projetos, as assinaturas SHA-1 dos seus aplicativos de produção são importadas para o projeto do Firebase. Confirme se isso foi feito na página Configurações. Observe que a vinculação dos seus projetos do Firebase ao Google Play também produz outros dados do Google Play, incluindo estatísticas de falhas e receitas, acessíveis ao Firebase, além de dados do Firebase, incluindo análises, acessíveis ao Google Play.

Como alternativa, se você não quiser compartilhar dados entre seus projetos do Firebase e do Google Play, você mesmo poderá especificar as assinaturas SHA-1 dos aplicativos na página "Configurações". Consulte Como autenticar seu cliente para saber como ver as assinaturas SHA-1 dos seus aplicativos.

2. Restrinja o escopo das suas chaves de API

Em seguida, configure suas chaves de API existentes para proibir o acesso à API Cloud Vision:

  1. Abra a página Credenciais do Console do Cloud.

  2. Para cada chave de API na lista, abra a visualização de edição e, na seção "Restrições de chave", adicione à lista todas as APIs disponíveis, exceto a API Cloud Vision.

3. Crie e use uma chave de API somente de depuração

Por fim, crie uma nova chave de API a ser usada apenas para desenvolvimento. O Kit de ML pode usar essa chave de API para acessar serviços do Cloud em ambientes em que a autenticação de aplicativos não é possível, como quando executado em emuladores.

  1. Crie uma nova chave de API a ser usada para desenvolvimento:

    1. Abra a página Credenciais do Console do Cloud.
    2. Clique em Criar credenciais > Chave de API e anote a nova chave de API. Essa chave permite o acesso à API a partir de aplicativos não autenticados, portanto, mantenha essa chave em segredo.
  2. Para garantir que a nova chave de API de depuração não vaze com o lançamento do aplicativo, especifique a chave da API de depuração em um arquivo de manifesto do Android usado apenas para compilações de depuração:

    1. Se você ainda não tiver um manifesto de depuração, clique em Arquivo > Novo > Outro > Arquivo de manifesto do Android e selecione debug nos conjuntos de origem desejados.

    2. No manifesto de depuração, adicione a seguinte declaração:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
      
  3. No seu aplicativo, configure o Kit de ML para usar a correspondência de impressão digital de certificado para autenticar seu cliente na produção e usar chaves de API, no caso a chave de depuração, somente em compilações de depuração:

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

    Kotlin

    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)

Próximas etapas

Consulte a lista de verificação de lançamento para mais informações sobre como preparar seu aplicativo para o lançamento ao usar outros recursos do Firebase.