L'API Verifica app SafetyNet, una libreria basata su Google Play Services, consente alla tua app di interagire in modo programmatico con la funzionalità Verifica app su un dispositivo, proteggendolo da app potenzialmente dannose.
Se la tua app gestisce dati utente sensibili, come informazioni finanziarie, è importante verificare che il dispositivo dell'utente sia protetto da app dannose e non contenga app che potrebbero impersonare la tua app o eseguire altre azioni dannose. Se la sicurezza del dispositivo non soddisfa il livello di sicurezza minimo, puoi disattivare la funzionalità all'interno della tua app per ridurre il pericolo per l'utente.
Nell'ambito del suo costante impegno a rendere l'ecosistema Android il più sicuro possibile, Google monitora e profila il comportamento delle app per Android. Se la funzionalità Verifica app rileva un'app potenzialmente pericolosa, tutti gli utenti che l'hanno installata vengono avvisati e invitati a disinstallarla tempestivamente. Questa procedura protegge la sicurezza e la privacy di questi utenti.
L'API SafetyNet Verify Apps ti consente di sfruttare questa funzionalità per proteggere i dati della tua app. Utilizzando questa API, puoi determinare se il dispositivo di un utente è protetto dalla funzionalità Verifica app, incoraggiare gli utenti che non utilizzano già la funzionalità ad attivare la protezione e identificare eventuali app potenzialmente dannose note installate sul dispositivo.
Termini di servizio aggiuntivi
Accedendo o utilizzando le API SafetyNet, accetti i Termini di servizio delle API di Google e i seguenti Termini di servizio dell'API Verifica app. Prima di accedere alle API, leggi e comprendi tutti i termini e le norme applicabili.
Termini di servizio dell'API Verify Apps
Le analisi delle app che identificano potenziali app dannose possono produrre sia falsi positivi che falsi negativi. I risultati (o la loro assenza) restituiti da questa suite API vengono presentati al meglio delle nostre conoscenze. Riconosci e comprendi che i risultati restituiti da questa suite di API SafetyNet non sono garantiti per essere sempre accurati.Aggiungi la dipendenza dell'API SafetyNet
Prima di utilizzare l'API Verify Apps, aggiungi l'API SafetyNet al tuo progetto. Se utilizzi Android Studio, aggiungi questa dipendenza al file Gradle a livello di app. Per maggiori informazioni, vedi Configurazione dell'API SafetyNet.
Attivare la verifica app
L'API SafetyNet Verify Apps fornisce due metodi per abilitare la funzionalità
Verifica app. Puoi determinare se la verifica
dell'app è abilitata utilizzando isVerifyAppsEnabled()
e puoi richiedere
l'attivazione della verifica dell'app utilizzando enableVerifyApps()
.
La differenza tra questi due metodi è che mentre isVerifyAppsEnabled()
segnala lo stato attuale della funzionalità Verifica app,
enableVerifyApps()
chiede esplicitamente all'utente il consenso all'utilizzo della funzionalità. Se
vuoi che la tua app sia a conoscenza dello stato della funzionalità per prendere una
decisione basata sulla sicurezza, deve chiamare isVerifyAppsEnabled()
. Tuttavia,
se vuoi assicurarti che la tua app possa elencare le app installate potenzialmente dannose, devi chiamare enableVerifyApps()
.
Determinare se la verifica app è abilitata
Il metodo asincrono isVerifyAppsEnabled()
consente alla tua app di determinare
se l'utente è registrato alla funzionalità Verifica app. Questo
metodo restituisce un oggetto VerifyAppsUserResponse
, che contiene informazioni
su tutte le azioni intraprese dall'utente in relazione alla funzionalità Verifica app, inclusa l'attivazione.
Il seguente snippet di codice mostra come creare il callback associato a questo metodo:
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."); } } });
Richiedere l'attivazione della verifica app
Il metodo asincrono enableVerifyApps()
consente all'app di richiamare una finestra di dialogo
che chiede all'utente di attivare la funzionalità Verifica app. Questo
metodo restituisce un oggetto VerifyAppsUserResponse
, che contiene informazioni
su tutte le azioni intraprese dall'utente in relazione alla funzionalità Verifica app, incluso se ha dato il consenso per attivarla.
Il seguente snippet di codice mostra come creare il callback associato a questo metodo:
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."); } } });
Quando utilizzi questo metodo, la tua app può riscontrare una o più condizioni insolite:
- Se la funzionalità Verifica app è già abilitata, la finestra di dialogo non viene visualizzata e l'API si comporta come se l'utente avesse dato il consenso per abilitare questa funzionalità.
- Se l'utente esce dalla finestra di dialogo, questa viene eliminata e l'API presuppone che l'utente non abbia dato il consenso per attivare questa funzionalità.
- Se la tua app e un'altra app chiamano questo metodo contemporaneamente, viene visualizzata una sola finestra di dialogo e tutte le app ricevono valori restituiti identici dal metodo.
Elenco delle app potenzialmente dannose installate
Il metodo asincrono listHarmfulApps()
consente di ottenere un elenco di eventuali
app potenzialmente dannose note che l'utente ha installato sul proprio dispositivo. Questo
elenco include le categorie delle app potenzialmente dannose identificate in modo che
la tua app possa intraprendere l'azione appropriata.
Il seguente snippet di codice mostra come creare il callback associato a questo metodo:
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."); } } });