Se seu aplicativo Android usa uma das APIs de nuvem do Firebase ML, antes de lançar seu aplicativo em produção, você deverá realizar algumas etapas 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 em nuvem. (Observe que apenas dispositivos sem root podem ser autenticados usando o método descrito.)
Em seguida, você criará uma chave de API somente para depuração que poderá usar por conveniência durante o teste e o desenvolvimento.
1. Registre seus aplicativos de produção no Firebase
Primeiro, registre seus aplicativos de produção no Firebase.
Certifique-se de ter as assinaturas SHA-1 do seu aplicativo. Consulte Autenticando seu cliente para saber como.
Vá para as
do projeto no console do Firebase e selecione a guia Configurações .Role para baixo até o cartão Seus aplicativos e selecione seu aplicativo Android.
Adicione a assinatura SHA-1 do seu aplicativo às informações do seu aplicativo.
2. Restrinja o escopo de suas chaves de API
Em seguida, configure suas chaves de API existentes para proibir o acesso à API Cloud Vision:
Abra a página Credenciais do console do Google Cloud. Quando solicitado, selecione seu projeto.
Para cada chave de API existente na lista, abra a visualização de edição.
Na seção Restrições de API , selecione Restringir chave e adicione à lista todas as APIs às quais você deseja que a chave de API tenha acesso. Certifique-se de não incluir a API Cloud Vision.
Ao configurar as restrições de API de uma chave de API, você declara explicitamente as APIs às quais a chave tem acesso. Por padrão, quando a seção Restrições de API tiver a opção Não restringir chave selecionada, uma chave de API poderá ser usada para acessar qualquer API que esteja habilitada para o projeto.
Agora, suas chaves de API existentes não concederão acesso aos serviços de ML em nuvem, mas cada chave continuará funcionando para quaisquer APIs que você adicionou à sua lista de restrições de API .
Observe que se você ativar quaisquer APIs adicionais no futuro, deverá adicioná-las à lista de restrições de API da chave de API aplicável.
3. Crie e use uma chave de API somente para depuração
Por fim, crie uma nova chave de API para ser usada apenas para desenvolvimento. O Firebase ML pode usar essa chave de API para acessar os serviços do Google Cloud em ambientes onde a autenticação do aplicativo não é possível, como na execução em emuladores.
Crie uma nova chave de API a ser usada no desenvolvimento:
Abra a página Credenciais do console do Google Cloud. Quando solicitado, selecione seu projeto.
Clique em Criar credenciais > Chave de API e anote a nova chave de API. Essa chave permite acesso à API de aplicativos não autenticados, portanto, mantenha essa chave confidencial .
Para garantir que a nova chave de API de depuração não vaze com seu aplicativo lançado, especifique a chave de API de depuração em um arquivo de manifesto do Android usado apenas para compilações de depuração:
Se você ainda não tiver um manifesto de depuração, crie um clicando em Arquivo > Novo > Outro > Arquivo de manifesto do Android e selecionando
debug
nos conjuntos de origem de destino.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>
No seu aplicativo, configure o Firebase ML para usar a correspondência de impressão digital do certificado para autenticar seu cliente na produção e para usar chaves de API (a chave de depuração) apenas em builds de depuração:
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);
Próximos passos
Consulte a lista de verificação de lançamento para obter informações sobre como preparar seu aplicativo para lançamento ao usar outros recursos do Firebase.