Proteger suas credenciais da nuvem do Firebase ML em apps Android
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
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 settingsConfigurações do projeto no console do Firebase e selecione a guia
Configurações.
Role 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:
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
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);
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-09-05 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/b694d4dbd411d31be39655f47691c3e9f3529b03/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/b694d4dbd411d31be39655f47691c3e9f3529b03/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."]]