Cette page explique comment interpréter et utiliser l'évaluation de l'intégrité renvoyée. Que vous effectuiez une requête API standard ou classique, l'évaluation de l'intégrité est renvoyée au même format avec un contenu similaire. L'évaluation de l'intégrité communique des informations sur la validité des appareils, des applications et des comptes. Le serveur de votre application peut utiliser la charge utile générée dans une évaluation déchiffrée et validée pour déterminer la meilleure façon de procéder pour une action ou une requête particulière dans votre application.
Format de l'évaluation de l'intégrité renvoyée
La charge utile est au format JSON en texte brut et contient des signaux d'intégrité en plus des informations fournies par le développeur.
La structure de la charge utile générale est la suivante :
{ requestDetails: { ... } appIntegrity: { ... } deviceIntegrity: { ... } accountDetails: { ... } environmentDetails: { ... } }
Vous devez d'abord vous assurer que les valeurs du champ requestDetails
correspondent à celles de la requête d'origine avant de vérifier chaque évaluation d'intégrité. Les sections suivantes décrivent chaque champ plus en détail.
Champ "Détails de la requête"
Le champ requestDetails
contient des informations sur la requête, y compris les informations fournies par le développeur dans requestHash
pour les requêtes standards et nonce
pour les requêtes classiques.
Pour les requêtes API standards :
requestDetails: { // Application package name this attestation was requested for. // Note that this field might be spoofed in the middle of the request. requestPackageName: "com.package.name" // Request hash provided by the developer. requestHash: "aGVsbG8gd29scmQgdGhlcmU" // The timestamp in milliseconds when the integrity token // was requested. timestampMillis: "1675655009345" }
Ces valeurs doivent correspondre à celles de la requête d'origine. Par conséquent, vérifiez la partie requestDetails
de la charge utile JSON en vous assurant que requestPackageName
et requestHash
correspondent à ce qui a été envoyé dans la requête d'origine, comme dans l'extrait de code suivant :
Kotlin
val requestDetails = JSONObject(payload).getJSONObject("requestDetails") val requestPackageName = requestDetails.getString("requestPackageName") val requestHash = requestDetails.getString("requestHash") val timestampMillis = requestDetails.getLong("timestampMillis") val currentTimestampMillis = ... // Ensure the token is from your app. if (!requestPackageName.equals(expectedPackageName) // Ensure the token is for this specific request || !requestHash.equals(expectedRequestHash) // Ensure the freshness of the token. || currentTimestampMillis - timestampMillis > ALLOWED_WINDOW_MILLIS) { // The token is invalid! See below for further checks. ... }
Java
RequestDetails requestDetails = decodeIntegrityTokenResponse .getTokenPayloadExternal() .getRequestDetails(); String requestPackageName = requestDetails.getRequestPackageName(); String requestHash = requestDetails.getRequestHash(); long timestampMillis = requestDetails.getTimestampMillis(); long currentTimestampMillis = ...; // Ensure the token is from your app. if (!requestPackageName.equals(expectedPackageName) // Ensure the token is for this specific request. || !requestHash.equals(expectedRequestHash) // Ensure the freshness of the token. || currentTimestampMillis - timestampMillis > ALLOWED_WINDOW_MILLIS) { // The token is invalid! See below for further checks. ... }
Pour les requêtes API classiques :
requestDetails: { // Application package name this attestation was requested for. // Note that this field might be spoofed in the middle of the // request. requestPackageName: "com.package.name" // base64-encoded URL-safe no-wrap nonce provided by the developer. nonce: "aGVsbG8gd29scmQgdGhlcmU" // The timestamp in milliseconds when the request was made // (computed on the server). timestampMillis: "1617893780" }
Ces valeurs doivent correspondre à celles de la requête d'origine. Par conséquent, vérifiez la partie requestDetails
de la charge utile JSON en vous assurant que requestPackageName
et nonce
correspondent à ce qui a été envoyé dans la requête d'origine, comme dans l'extrait de code suivant :
Kotlin
val requestDetails = JSONObject(payload).getJSONObject("requestDetails") val requestPackageName = requestDetails.getString("requestPackageName") val nonce = requestDetails.getString("nonce") val timestampMillis = requestDetails.getLong("timestampMillis") val currentTimestampMillis = ... // Ensure the token is from your app. if (!requestPackageName.equals(expectedPackageName) // Ensure the token is for this specific request. See 'Generate a nonce' // section of the doc on how to store/compute the expected nonce. || !nonce.equals(expectedNonce) // Ensure the freshness of the token. || currentTimestampMillis - timestampMillis > ALLOWED_WINDOW_MILLIS) { // The token is invalid! See below for further checks. ... }
Java
JSONObject requestDetails = new JSONObject(payload).getJSONObject("requestDetails"); String requestPackageName = requestDetails.getString("requestPackageName"); String nonce = requestDetails.getString("nonce"); long timestampMillis = requestDetails.getLong("timestampMillis"); long currentTimestampMillis = ...; // Ensure the token is from your app. if (!requestPackageName.equals(expectedPackageName) // Ensure the token is for this specific request. See 'Generate a nonce' // section of the doc on how to store/compute the expected nonce. || !nonce.equals(expectedNonce) // Ensure the freshness of the token. || currentTimestampMillis - timestampMillis > ALLOWED_WINDOW_MILLIS) { // The token is invalid! See below for further checks. ... }
Champ "Intégrité de l'application"
Le champ appIntegrity
contient des informations liées au package.
appIntegrity: { // PLAY_RECOGNIZED, UNRECOGNIZED_VERSION, or UNEVALUATED. appRecognitionVerdict: "PLAY_RECOGNIZED" // The package name of the app. // This field is populated iff appRecognitionVerdict != UNEVALUATED. packageName: "com.package.name" // The sha256 digest of app certificates (base64-encoded URL-safe). // This field is populated iff appRecognitionVerdict != UNEVALUATED. certificateSha256Digest: ["6a6a1474b5cbbb2b1aa57e0bc3"] // The version of the app. // This field is populated iff appRecognitionVerdict != UNEVALUATED. versionCode: "42" }
appRecognitionVerdict
peut avoir les valeurs suivantes :
PLAY_RECOGNIZED
- L'application et le certificat correspondent aux versions distribuées par Google Play.
UNRECOGNIZED_VERSION
- Le nom du certificat ou du package ne correspond pas aux données dont Google Play dispose.
UNEVALUATED
- L'intégrité de l'application n'a pas été examinée. Une condition requise n'a pas été respectée (l'appareil n'est pas suffisamment fiable, par exemple).
Pour vous assurer que le jeton a été généré par une application que vous avez créée, vérifiez que l'intégrité de l'application est conforme aux attentes, comme indiqué dans l'extrait de code suivant :
Kotlin
val appIntegrity = JSONObject(payload).getJSONObject("appIntegrity") val appRecognitionVerdict = appIntegrity.getString("appRecognitionVerdict") if (appRecognitionVerdict == "PLAY_RECOGNIZED") { // Looks good! }
Java
JSONObject appIntegrity = new JSONObject(payload).getJSONObject("appIntegrity"); String appRecognitionVerdict = appIntegrity.getString("appRecognitionVerdict"); if (appRecognitionVerdict.equals("PLAY_RECOGNIZED")) { // Looks good! }
Vous pouvez également vérifier manuellement le nom du package, la version et les certificats de l'application.
Champ "Intégrité de l'appareil"
Le champ deviceIntegrity
peut contenir une seule valeur, deviceRecognitionVerdict
, comportant un ou plusieurs libellés représentant la capacité d'un appareil à appliquer l'intégrité des applications. Si un appareil ne répond aux critères d'aucun libellé, le champ deviceIntegrity
est vide.
deviceIntegrity: { // "MEETS_DEVICE_INTEGRITY" is one of several possible values. deviceRecognitionVerdict: ["MEETS_DEVICE_INTEGRITY"] }
Par défaut, deviceRecognitionVerdict
peut contenir les éléments suivants :
MEETS_DEVICE_INTEGRITY
- L'application s'exécute sur un appareil Android doté des services Google Play. L'appareil répond aux vérifications d'intégrité du système et respecte la configuration Android requise.
- Vide (valeur vide)
- L'application est exécutée sur un appareil présentant des signes d'attaque (hook d'API, par exemple) ou un piratage du système (mode root, par exemple), ou elle n'est pas exécutée sur un appareil physique (un émulateur n'ayant pas réussi les contrôles d'intégrité de Google Play, par exemple).
Pour vous assurer que le jeton provient d'un appareil fiable, vérifiez que deviceRecognitionVerdict
est conforme aux attentes, comme indiqué dans l'extrait de code suivant :
Kotlin
val deviceIntegrity = JSONObject(payload).getJSONObject("deviceIntegrity") val deviceRecognitionVerdict = if (deviceIntegrity.has("deviceRecognitionVerdict")) { deviceIntegrity.getJSONArray("deviceRecognitionVerdict").toString() } else { "" } if (deviceRecognitionVerdict.contains("MEETS_DEVICE_INTEGRITY")) { // Looks good! }
Java
JSONObject deviceIntegrity = new JSONObject(payload).getJSONObject("deviceIntegrity"); String deviceRecognitionVerdict = deviceIntegrity.has("deviceRecognitionVerdict") ? deviceIntegrity.getJSONArray("deviceRecognitionVerdict").toString() : ""; if (deviceRecognitionVerdict.contains("MEETS_DEVICE_INTEGRITY")) { // Looks good! }
Si vous rencontrez des problèmes d'intégrité de votre appareil lors des tests, assurez-vous que la configuration ROM d'usine est installée (par exemple, en réinitialisant l'appareil) et que le bootloader est verrouillé. Vous pouvez également créer des tests API Play Integrity dans la Play Console.
Libellés d'appareils conditionnels
Si votre application est publiée sur Google Play Jeux pour PC, le deviceRecognitionVerdict
peut également contenir le libellé suivant :
MEETS_VIRTUAL_INTEGRITY
- L'application s'exécute sur un émulateur Android doté des services Google Play. L'émulateur réussit les contrôles d'intégrité du système et respecte la configuration Android requise.
Informations facultatives provenant des appareils
Si vous acceptez de recevoir des libellés supplémentaires dans l'évaluation de l'intégrité, deviceRecognitionVerdict
peut avoir les libellés supplémentaires suivants :
MEETS_BASIC_INTEGRITY
- L'application est exécutée sur un appareil qui réussit les contrôles d'intégrité de base du système. Pour les appareils Android 13 ou version ultérieure, elle nécessite l'attestation des clés de la plate-forme Android. Cet appareil ne respecte peut-être pas la configuration Android requise et n'est éventuellement pas autorisé à exécuter les services Google Play. Par exemple, il est possible que l'appareil exécute une version non reconnue d'Android, qu'il utilise un bootloader déverrouillé, qu'il effectue un démarrage non validé ou qu'il n'ait pas été certifié par le fabricant.
MEETS_STRONG_INTEGRITY
- L'application est exécutée sur un appareil Android équipé des services Google Play et offre une bonne garantie de l'intégrité du système, telle qu'une preuve matérielle de l'intégrité du démarrage. Pour les appareils Android 13 ou version ultérieure, une mise à jour de sécurité doit avoir été effectuée au cours de la dernière année. L'appareil a réussi les contrôles d'intégrité du système et respecte la configuration Android requise.
Un même appareil renvoie plusieurs libellés dans l'évaluation de l'intégrité de l'appareil si chacun des critères de ces libellés est rempli.
Activité récente de l'appareil
Vous pouvez également activer l'option permettant de connaître l'activité récente de l'appareil. Celle-ci indique le nombre de fois où votre application a demandé un jeton d'intégrité sur un appareil spécifique au cours de la dernière heure. Vous pouvez utiliser l'activité récente de l'appareil pour protéger votre application contre les appareils qui enregistrent une forte activité de manière anormale, ce qui peut être le signe qu'une attaque est en cours. Vous pouvez décider du niveau de confiance attribué à chaque niveau d'activité récente de l'appareil en fonction du nombre de fois que vous estimez qu'un jeton d'intégrité devrait être demandé par votre appli installée sur un appareil type au cours de chaque heure.
Si vous acceptez de recevoir recentDeviceActivity
, le champ deviceIntegrity
aura deux valeurs:
deviceIntegrity: { deviceRecognitionVerdict: ["MEETS_DEVICE_INTEGRITY"] recentDeviceActivity: { // "LEVEL_2" is one of several possible values. deviceActivityLevel: "LEVEL_2" } }
Les définitions deviceActivityLevel
diffèrent selon les modes et peuvent prendre l'une des valeurs suivantes:
Niveau d'activité récent de l'appareil | Requêtes de jetons d'intégrité d'API standards sur cet appareil au cours de la dernière heure par application | Requêtes de jetons d'intégrité API classiques sur cet appareil au cours de la dernière heure par application |
---|---|---|
LEVEL_1 (la plus basse) |
10 ou moins | 5 ou moins |
LEVEL_2 |
Entre 11 et 25 | Entre 6 et 10 |
LEVEL_3 |
Entre 26 et 50 | Entre 11 et 15 |
LEVEL_4 (le plus élevé) |
Plus de 50 | Plus de 15 |
UNEVALUATED |
L'activité récente de l'appareil n'a pas été évaluée. Cela peut se produire pour les raisons suivantes :
|
Attributs de l'appareil
Vous pouvez également activer les attributs de l'appareil, qui indiquent la version du SDK Android de l'OS Android exécuté sur l'appareil. À l'avenir, il pourra être étendu à d'autres attributs d'appareil.
La valeur de la version du SDK correspond au numéro de version du SDK Android défini dans Build.VERSION_CODES
. La version du SDK n'est pas évaluée si une condition requise n'a pas été respectée. Dans ce cas, le champ sdkVersion
n'est pas défini. Par conséquent, le champ deviceAttributes
est vide.
Cela peut être dû aux raisons suivantes:
- L'appareil n'est pas suffisamment fiable.
- La version de votre application installée sur l'appareil est inconnue de Google Play.
- L'appareil rencontre des problèmes techniques.
Si vous acceptez de recevoir deviceAttributes
, le champ deviceIntegrity
aura le champ supplémentaire suivant:
deviceIntegrity: { deviceRecognitionVerdict: ["MEETS_DEVICE_INTEGRITY"] deviceAttributes: { // 33 is one possible value, which represents Android 13 (Tiramisu). sdkVersion: 33 } }
Si la version du SDK n'est pas évaluée, le champ deviceAttributes
est défini comme suit:
deviceIntegrity: { deviceRecognitionVerdict: ["MEETS_DEVICE_INTEGRITY"] deviceAttributes: {} // sdkVersion field is not set. }
Champ "Détails du compte"
Le champ accountDetails
contient une valeur unique, appLicensingVerdict
, qui représente l'état des licences Google Play de l'application pour le compte utilisateur connecté sur l'appareil. Si le compte utilisateur dispose de la licence Play pour l'application, cela signifie qu'il l'a téléchargée ou achetée sur Google Play.
accountDetails: { // This field can be LICENSED, UNLICENSED, or UNEVALUATED. appLicensingVerdict: "LICENSED" }
appLicensingVerdict
peut avoir une des valeurs suivantes :
LICENSED
- L'utilisateur est autorisé à accéder à l'application. En d'autres termes, l'utilisateur a installé ou mis à jour votre application depuis Google Play sur son appareil.
UNLICENSED
- L'utilisateur n'est pas autorisé à accéder à l'application. C'est par exemple le cas s'il télécharge votre application indépendamment ou sans passer par Google Play. Vous pouvez montrer la boîte de dialogue GET_LICENSED à l'utilisateur en réponse à ce problème.
UNEVALUATED
Les détails concernant la licence n'ont pas été examinés, car une condition requise n'était pas respectée.
Plusieurs raisons peuvent expliquer cette situation. Par exemple :
- L'appareil n'est pas suffisamment fiable.
- La version de votre application installée sur l'appareil est inconnue de Google Play.
- L'utilisateur n'est pas connecté à Google Play.
Pour vérifier que l'utilisateur dispose des droits d'accès à votre application, vérifiez que appLicensingVerdict
est conforme aux attentes, comme indiqué dans l'extrait de code suivant :
Kotlin
val accountDetails = JSONObject(payload).getJSONObject("accountDetails") val appLicensingVerdict = accountDetails.getString("appLicensingVerdict") if (appLicensingVerdict == "LICENSED") { // Looks good! }
Java
JSONObject accountDetails = new JSONObject(payload).getJSONObject("accountDetails"); String appLicensingVerdict = accountDetails.getString("appLicensingVerdict"); if (appLicensingVerdict.equals("LICENSED")) { // Looks good! }
Champ "Détails de l'environnement"
Vous pouvez également activer des signaux supplémentaires sur l'environnement. Le risque d'accès à l'application indique à votre application si d'autres applications en cours d'exécution peuvent être utilisées pour capturer l'écran, afficher des superpositions ou contrôler l'appareil. L'évaluation Play Protect indique si Google Play Protect est activé sur l'appareil et s'il a détecté un logiciel malveillant connu.
Si vous avez activé l'évaluation du risque d'accès à l'application ou l'évaluation Play Protect dans la Google Play Console, la réponse de l'API inclura le champ environmentDetails
. Le champ environmentDetails
peut contenir deux valeurs, appAccessRiskVerdict
et playProtectVerdict
.
Évaluation du risque d'accès à l'application
Une fois activé, le champ environmentDetails
de la charge utile de l'API Play Integrity contiendra la nouvelle évaluation du risque d'accès à l'application.
{
requestDetails: { ... }
appIntegrity: { ... }
deviceIntegrity: { ... }
accountDetails: { ... }
environmentDetails: {
appAccessRiskVerdict: {
// This field contains one or more responses, for example the following.
appsDetected: ["KNOWN_INSTALLED", "UNKNOWN_INSTALLED", "UNKNOWN_CAPTURING"]
}
}
}
Si le risque d'accès des applications a été évalué, appAccessRiskVerdict
contient le champ appsDetected
avec une ou plusieurs réponses. Ces réponses appartiennent à l'un des deux groupes suivants, en fonction de la source d'installation des applications détectées:
Applications Play ou système: applications installées par Google Play ou préchargées par le fabricant de l'appareil sur sa partition du système (identifiée par
FLAG_SYSTEM
). Les réponses de ces applications sont précédées du préfixeKNOWN_
.Autres applications : Applications qui ne sont pas installées par Google Play. Cela exclut les applications préchargées sur la partition du système par le fabricant de l'appareil. Les réponses pour ces applications sont précédées du préfixe
UNKNOWN_
.
Les réponses suivantes peuvent être renvoyées:
KNOWN_INSTALLED
,UNKNOWN_INSTALLED
- Des applications installées correspondent à la source d'installation correspondante.
KNOWN_CAPTURING
,UNKNOWN_CAPTURING
- Des applications en cours d'exécution dont les autorisations sont activées peuvent être utilisées pour afficher l'écran pendant que votre application est en cours d'exécution. Cela exclut les services d'accessibilité vérifiés connus de Google Play et exécutés sur l'appareil.
KNOWN_CONTROLLING
,UNKNOWN_CONTROLLING
- Des applications en cours d'exécution dont les autorisations sont activées peuvent être utilisées pour contrôler l'appareil et contrôler directement les entrées dans votre application. Elles peuvent également servir à capturer les entrées et les sorties de votre application. Cela exclut les services d'accessibilité vérifiés connus de Google Play et exécutés sur l'appareil.
KNOWN_OVERLAYS
,UNKNOWN_OVERLAYS
- Des applications en cours d'exécution dont les autorisations sont activées peuvent être utilisées pour afficher des superpositions sur votre application. Cela exclut les services d'accessibilité vérifiés connus de Google Play et exécutés sur l'appareil.
- Vide (valeur vide)
Le risque d'accès à l'application n'est pas examiné si une condition requise n'a pas été respectée. Dans ce cas, le champ
appAccessRiskVerdict
est vide. Plusieurs raisons peuvent expliquer cette situation. Par exemple:- L'appareil n'est pas suffisamment fiable.
- Le facteur de forme de l'appareil n'est pas un téléphone, une tablette ou un pliable.
- L'appareil n'est pas équipé d'Android 6 (niveau d'API 23) ou version ultérieure.
- La version de votre application installée sur l'appareil est inconnue de Google Play.
- La version du Google Play Store installée sur l'appareil est obsolète.
- Jeux uniquement : Le compte utilisateur ne dispose pas d'une licence Play pour le jeu.
- Une requête standard a été utilisée avec le paramètre
verdictOptOut
. - Une requête standard a été utilisée avec une version de bibliothèque de l'API Play Integrity qui n'est pas encore compatible avec le risque d'accès à l'application pour les requêtes standards.
Le risque d'accès à l'application exclut automatiquement les services d'accessibilité vérifiés qui ont fait l'objet d'un examen amélioré de l'accessibilité de Google Play (installés par n'importe quel plate-forme de téléchargement d'applications sur l'appareil). "Exclu" signifie que les services d'accessibilité vérifiés exécutés sur l'appareil ne renvoient pas de réponse de capture, de contrôle ou de superposition dans l'évaluation du risque d'accès à l'application. Pour demander un examen amélioré de l'accessibilité de Google Play pour votre application d'accessibilité, publiez-la sur Google Play en vous assurant que l'indicateur isAccessibilityTool
est défini sur "true" dans le fichier manifeste de votre application, ou demandez un examen.
Le tableau suivant donne quelques exemples d'évaluations et leur signification (ce tableau ne répertorie pas tous les résultats possibles):
Exemple de réponse d'évaluation du risque d'accès à l'application | Interprétation |
---|---|
appsDetected: ["KNOWN_INSTALLED"]
|
Seules les applications installées sont reconnues par Google Play ou préchargées sur la partition du système par le fabricant de l'appareil. Aucune application en cours d'exécution ne peut entraîner l'évaluation CAPTURING, CONTROLLING ou OVERLAYS. |
appsDetected: ["KNOWN_INSTALLED", "UNKNOWN_INSTALLED", "UNKNOWN_CAPTURING"]
|
Des applications sont installées par Google Play ou préchargées sur la partition système par le fabricant de l'appareil. D'autres applications sont en cours d'exécution, dont les autorisations sont activées, peuvent servir à afficher l'écran ou à capturer d'autres entrées et sorties. |
appsDetected: ["KNOWN_INSTALLED", "KNOWN_CAPTURING", "UNKNOWN_INSTALLED", "UNKNOWN_CONTROLLING"]
|
Des applications Play ou système en cours d'exécution dont les autorisations sont activées peuvent être utilisées pour afficher l'écran ou capturer d'autres entrées et sorties. D'autres applications en cours d'exécution, dont les autorisations sont activées, peuvent servir à contrôler l'appareil et à commander directement les entrées dans votre application. |
appAccessRiskVerdict: {}
|
Le risque d'accès à l'application n'est pas examiné, car une condition requise n'a pas été respectée. Par exemple, l'appareil n'était pas suffisamment fiable. |
En fonction du niveau de risque, vous pouvez décider des combinaisons d'évaluations acceptables et des évaluations pour lesquelles vous souhaitez prendre des mesures. L'extrait de code suivant montre comment vérifier qu'aucune application en cours d'exécution ne peut capturer l'écran ou contrôler votre application:
Kotlin
val environmentDetails = JSONObject(payload).getJSONObject("environmentDetails") val appAccessRiskVerdict = environmentDetails.getJSONObject("appAccessRiskVerdict") if (appAccessRiskVerdict.has("appsDetected")) { val appsDetected = appAccessRiskVerdict.getJSONArray("appsDetected").toString() if (!appsDetected.contains("CAPTURING") && !appsDetected.contains("CONTROLLING")) { // Looks good! } }
Java
JSONObject environmentDetails = new JSONObject(payload).getJSONObject("environmentDetails"); JSONObject appAccessRiskVerdict = environmentDetails.getJSONObject("appAccessRiskVerdict"); if (appAccessRiskVerdict.has("appsDetected")) { String appsDetected = appAccessRiskVerdict.getJSONArray("appsDetected").toString() if (!appsDetected.contains("CAPTURING") && !appsDetected.contains("CONTROLLING")) { // Looks good! } }
Corriger les évaluations du risque d'accès à l'application
En fonction de votre niveau de risque, vous pouvez décider des évaluations de risque d'accès des applications pour lesquelles vous souhaitez prendre des mesures avant de laisser l'utilisateur effectuer une requête ou une action. Vous pouvez afficher des invites Google Play facultatives à l'utilisateur après avoir vérifié le risque d'accès de l'application. Vous pouvez afficher CLOSE_UNKNOWN_ACCESS_RISK pour demander à l'utilisateur de fermer les applications inconnues à l'origine du risque d'accès de l'application, ou CLOSE_ALL_ACCESS_RISK pour demander à l'utilisateur de fermer toutes les applications (connues et inconnues) à l'origine du risque d'accès de l'application.
Évaluation Play Protect
Une fois activé, le champ environmentDetails
de la charge utile de l'API Play Integrity contiendra l'évaluation Play Protect:
environmentDetails: {
playProtectVerdict: "NO_ISSUES"
}
playProtectVerdict
peut avoir une des valeurs suivantes :
NO_ISSUES
- Play Protect est activé et n'a détecté aucun problème d'application sur l'appareil.
NO_DATA
- Play Protect est activé, mais aucune analyse n'a encore été effectuée. L'appareil ou l'application Play Store ont peut-être été réinitialisés récemment.
POSSIBLE_RISK
- Play Protect est désactivé.
MEDIUM_RISK
- Play Protect est activé et a détecté des applications potentiellement dangereuses installées sur l'appareil.
HIGH_RISK
- Play Protect est activé et a détecté des applications dangereuses installées sur l'appareil.
UNEVALUATED
L'évaluation Play Protect n'a pas été menée.
Plusieurs raisons peuvent expliquer cette situation. Par exemple :
- L'appareil n'est pas suffisamment fiable.
- Jeux uniquement : Le compte utilisateur ne dispose pas d'une licence Play pour le jeu.
Conseils sur l'utilisation de l'évaluation Play Protect
Le serveur backend de votre application peut décider de la marche à suivre en fonction de l'évaluation basée sur votre tolérance au risque. Voici quelques suggestions et actions utilisateur possibles :
NO_ISSUES
- Play Protect est activé et n'a détecté aucun problème. Aucune action n'est donc requise de la part de l'utilisateur.
POSSIBLE_RISK
etNO_DATA
- Lorsque vous recevez ces évaluations, demandez à l'utilisateur de vérifier que Play Protect est activé et qu'une analyse a été effectuée.
NO_DATA
ne doit apparaître que dans de rares cas. MEDIUM_RISK
etHIGH_RISK
- En fonction de votre tolérance au risque, vous pouvez demander à l'utilisateur de lancer Play Protect et de prendre des mesures concernant les avertissements Play Protect. Si l'utilisateur ne peut pas répondre à ces exigences, vous pouvez l'empêcher d'effectuer l'action du serveur.