A API SafetyNet Verify Apps permite que seu app interaja programaticamente com o recurso Verificar apps em um dispositivo, o que protege o dispositivo contra aplicativos potencialmente nocivos.
Se seu app processa dados confidenciais do usuário, como informações financeiras, confirme se o dispositivo atual está protegido contra apps maliciosos e não possui apps que possam fingir ser o app ou realizar outras ações maliciosas. Se a segurança do dispositivo não cumpre a abordagem de segurança mínima, você pode desativar a funcionalidade no seu app para reduzir o perigo para o usuário.
Como parte do compromisso contínuo de tornar o ecossistema do Android o mais seguro possível, o Google monitora e cria perfis de comportamento dos apps para Android. Se o recurso Verificar apps detectar um app potencialmente nocivo, todos os usuários que instalaram o app serão notificados e incentivados a desinstalá-lo imediatamente. Esse processo protege a segurança e a privacidade desses usuários.
A API SafetyNet Verify Apps permite que você use esse recurso para proteger os dados do seu app. Com essa API, você pode determinar se o dispositivo de um usuário é protegido pelo recurso Verificar apps, incentivar os usuários que ainda não usam o recurso a ativar a proteção dele e identificar os apps potencialmente nocivos conhecidos que estão instalados no dispositivo.
Cuidado: ainda que o SafetyNet alerte os usuários sobre apps potencialmente nocivos, alguns usuários optam por não desinstalar esses apps ou não veem a notificação de aviso. Portanto, um dispositivo pode ter apps potencialmente nocivos instalados mesmo quando o recurso Verificar apps está ativado.
Outros Termos de Serviço
Ao acessar ou usar as APIs SafetyNet, você concorda com os Termos de Serviço das APIs do Google e com estes Outros Termos. Leia e entenda todos os termos e políticas aplicáveis antes de acessar as APIs.
Termos de Serviço da API Verify Apps
As análises que identificam apps potencialmente nocivos podem resultar em falsos positivos e falsos negativos. Os resultados (ou a falta deles) retornados desse conjunto de APIs são apresentados da melhor forma possível. Você reconhece e entende que os resultados retornados por esse conjunto da API SafetyNet não têm garantia de serem precisos em todos os momentos.Ativar a verificação de apps
A API SafetyNet Verify Apps oferece dois métodos para ativar o recurso Verificar apps. Você pode determinar se a verificação de apps está habilitada usando isVerifyAppsEnabled()
e solicitar a ativação da verificação de apps usando enableVerifyApps()
.
A diferença entre esses dois métodos é que, enquanto isVerifyAppsEnabled()
informa o status atual do recurso Verificar apps, o enableVerifyApps()
pede explicitamente ao usuário permissão para usar o recurso. Se você quer que seu app só esteja ciente do status do recurso para tomar decisões voltadas à segurança, o app precisa chamar isVerifyAppsEnabled()
. No entanto, se você quiser garantir que seu app possa listar os apps potencialmente nocivos instalados, chame enableVerifyApps()
.
Determinar se a verificação de apps está ativada
O método assíncrono isVerifyAppsEnabled()
permite que seu app determine se o usuário está inscrito no recurso Verificar apps. Esse método retorna um objeto VerifyAppsUserResult
, que contém informações sobre todas as ações que o usuário tenha tomado com relação ao recurso "Verificar apps", incluindo a ativação dele.
O snippet de código a seguir mostra como criar o callback associado a esse método:
Kotlin
SafetyNet.getClient(this) .isVerifyAppsEnabled .addOnCompleteListener { task -> if (task.isSuccessful) { if (task.result.isVerifyAppsEnabled) { Log.d("MY_APP_TAG", "The Verify Apps feature is enabled.") } else { Log.d("MY_APP_TAG", "The Verify Apps feature is disabled.") } } else { Log.e("MY_APP_TAG", "A general error occurred.") } }
Java
SafetyNet.getClient(this) .isVerifyAppsEnabled() .addOnCompleteListener(new OnCompleteListener<VerifyAppsUserResponse>() { @Override public void onComplete(Task<VerifyAppsUserResponse> task) { if (task.isSuccessful()) { VerifyAppsUserResponse result = task.getResult(); if (result.isVerifyAppsEnabled()) { Log.d("MY_APP_TAG", "The Verify Apps feature is enabled."); } else { Log.d("MY_APP_TAG", "The Verify Apps feature is disabled."); } } else { Log.e("MY_APP_TAG", "A general error occurred."); } } });
Solicitar a ativação da verificação de apps
O método assíncrono enableVerifyApps()
permite que seu app invoque uma caixa de diálogo solicitando que o usuário ative o recurso Verificar apps. Esse método retorna um objeto VerifyAppsUserResult
, que contém informações sobre todas as ações que o usuário tenha tomado com relação ao recurso "Verificar apps", inclusive se foi concedida permissão para a ativação dele.
O snippet de código a seguir mostra como criar o callback associado a esse método:
Kotlin
SafetyNet.getClient(this) .enableVerifyApps() .addOnCompleteListener { task -> if (task.isSuccessful) { if (task.result.isVerifyAppsEnabled) { Log.d("MY_APP_TAG", "The user gave consent to enable the Verify Apps feature.") } else { Log.d( "MY_APP_TAG", "The user didn't give consent to enable the Verify Apps feature." ) } } else { Log.e("MY_APP_TAG", "A general error occurred.") } }
Java
SafetyNet.getClient(this) .enableVerifyApps() .addOnCompleteListener(new OnCompleteListener<VerifyAppsUserResponse>() { @Override public void onComplete(Task<VerifyAppsUserResponse> task) { if (task.isSuccessful()) { VerifyAppsUserResponse result = task.getResult(); if (result.isVerifyAppsEnabled()) { Log.d("MY_APP_TAG", "The user gave consent " + "to enable the Verify Apps feature."); } else { Log.d("MY_APP_TAG", "The user didn't give consent " + "to enable the Verify Apps feature."); } } else { Log.e("MY_APP_TAG", "A general error occurred."); } } });
Seu app pode encontrar vários casos isolados ao usar esse método:
- Se o recurso Verificar apps já estiver ativado, a caixa de diálogo não será exibida e a API se comportará como se o usuário tivesse acabado de dar permissão para ativar esse recurso.
- Se o usuário sair da caixa de diálogo, ela será destruída, e a API presumirá que o usuário não autorizou a ativação desse recurso.
- Se seu aplicativo e outro app chamarem esse método simultaneamente, apenas uma caixa de diálogo será exibida, e todos os apps receberão valores de retorno idênticos do método.
Listar apps potencialmente nocivos instalados
O método assíncrono listHarmfulApps()
permite que você veja uma lista de todos os apps potencialmente nocivos conhecidos que o usuário instalou no dispositivo. Essa lista inclui categorias para os apps potencialmente nocivos identificados para que seu app possa tomar as medidas adequadas.
O snippet de código a seguir mostra como criar o callback associado a esse método:
Kotlin
SafetyNet.getClient(this) .listHarmfulApps() .addOnCompleteListener { task -> Log.d(TAG, "Received listHarmfulApps() result") if (task.isSuccessful) { val result = task.result val scanTimeMs = result.lastScanTimeMs val appList = result.harmfulAppsList if (appList?.isNotEmpty() == true) { Log.e("MY_APP_TAG", "Potentially harmful apps are installed!") for (harmfulApp in appList) { Log.e("MY_APP_TAG", "Information about a harmful app:") Log.e("MY_APP_TAG", " APK: ${harmfulApp.apkPackageName}") Log.e("MY_APP_TAG", " SHA-256: ${harmfulApp.apkSha256}") // Categories are defined in VerifyAppsConstants. Log.e("MY_APP_TAG", " Category: ${harmfulApp.apkCategory}") } } else { Log.d("MY_APP_TAG", "There are no known potentially harmful apps installed.") } } else { Log.d( "MY_APP_TAG", "An error occurred. Call isVerifyAppsEnabled() to ensure that the user " + "has consented." ) } }
Java
SafetyNet.getClient(this) .listHarmfulApps() .addOnCompleteListener(new OnCompleteListener<HarmfulAppsResponse>() { @Override public void onComplete(Task<HarmfulAppsResponse> task) { Log.d(TAG, "Received listHarmfulApps() result"); if (task.isSuccessful()) { HarmfulAppsResponse result = task.getResult(); long scanTimeMs = result.getLastScanTimeMs(); List<HarmfulAppsData> appList = result.getHarmfulAppsList(); if (appList.isEmpty()) { Log.d("MY_APP_TAG", "There are no known " + "potentially harmful apps installed."); } else { Log.e("MY_APP_TAG", "Potentially harmful apps are installed!"); for (HarmfulAppsData harmfulApp : appList) { Log.e("MY_APP_TAG", "Information about a harmful app:"); Log.e("MY_APP_TAG", " APK: " + harmfulApp.apkPackageName); Log.e("MY_APP_TAG", " SHA-256: " + harmfulApp.apkSha256); // Categories are defined in VerifyAppsConstants. Log.e("MY_APP_TAG", " Category: " + harmfulApp.apkCategory); } } } else { Log.d("MY_APP_TAG", "An error occurred. " + "Call isVerifyAppsEnabled() to ensure " + "that the user has consented."); } } });