Se o app Android usa uma das APIs de nuvem do Firebase ML, antes de lançar seu app 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ê vai criar uma chave de API somente para depuração que poderá ser usada por conveniência durante o teste e o desenvolvimento.
1. Registre seus apps de produção com o Firebase
Primeiro, registre seus aplicativos de produção usando o Firebase.
Verifique se você tem as assinaturas SHA-1 do seu aplicativo. Consulte Como autenticar seu cliente para saber como fazer isso.
Acesse as Firebase e selecione a guia Configurações.
Configurações do projeto no console doRole a tela para baixo até o card Seus apps e selecione seu app Android.
Adicione a assinatura SHA-1 do seu app às informações dele.
2. Restrinja o escopo das 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 o projeto.
Para cada chave de API na lista, abra a visualização de edição.
Na seção Restrições da API, selecione Restringir chave e adicione à lista todas as APIs que precisam ter acesso liberado para a chave. Não inclua a API Cloud Vision.
Ao configurar as restrições de API de uma chave, você declara explicitamente quais APIs a chave pode acessar. Por padrão, quando a seção Restrições da API tiver a opção Não restringir a chave selecionada, uma chave de API poderá ser usada para acessar qualquer API ativada para o projeto.
Agora as chaves de API não concederão acesso aos serviços de ML na nuvem, mas todas elas continuarão funcionando para as APIs adicionadas à lista de restrições de API.
Se você ativar mais APIs no futuro, precisará adicioná-las à lista de restrições de API para a chave em questão.
3. Crie e use uma chave de API somente para depuração
Por fim, crie uma nova chave de API que será usada apenas para desenvolvimento. O Firebase ML pode usar essa chave de API para acessar serviços Google Cloud em ambientes em que a autenticação de apps não é possível, como quando executado em emuladores.
Crie uma nova chave de API a ser usada para desenvolvimento:
Abra a página Credenciais do console do Google Cloud. Quando solicitado, selecione o projeto.
Clique em Criar credenciais > Chave de API e anote a nova chave de API. Ela permite o acesso à API por aplicativos não autenticados. Por isso, mantenha essa chave em segredo.
Para garantir que a nova chave de API de depuração não vaze com o lançamento do app, especifique essa chave em um arquivo de manifesto do Android usado apenas para builds 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 desejados.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 app, configure o Firebase ML para usar a correspondência de impressões digitais do certificado para autenticar seu cliente na produção e para usar chaves de API, no caso, a chave de depuração, somente 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óximas etapas
Consulte a checklist de lançamento para mais informações sobre como preparar seu app para o lançamento ao usar outros recursos do Firebase.