Migrer depuis l'API SafetyNet Attestation

Si vous vérifiez déjà les réponses à l'aide d'un serveur de confiance, la migration de l'API SafetyNet Attestation vers l'API Play Integrity est simple. L'API Play Integrity peut également être utilisée pour remplacer les vérifications de licences d'application effectuées directement avec l'application Play Store via AIDL, telles que celles effectuées par la LVL (License Verification Library). La plupart des modifications requises seront apportées côté serveur de confiance, qui doit lire et analyser le jeton de réponse Play Integrity. Notez qu'au cours de la migration, l'application et le serveur doivent être compatibles simultanément avec les deux API pour prendre en charge les clients plus anciens qui n'ont pas encore été mis à jour.

Si votre application a reçu des limites de quota plus élevées pour l'API SafetyNet Attestation, vous devez vérifier le niveau d'utilisation attribué à l'API Play Integrity et, si nécessaire, demander la migration vers le niveau plus élevé adéquat.

Les modifications suivantes sont nécessaires pour prendre en charge l'API Play Integrity :

Client Android :

  • Assurez-vous que le code transmet le nonce au bon format au compilateur IntegrityTokenRequest :
    • String (au lieu d'un tableau d'octets)
    • Sécurisé pour les URL
    • Encodée en base64 et non encapsulée
    • 16 caractères minimum
    • 500 caractères maximum
  • Examinez la logique de nouvelle tentative et assurez-vous que l'application gère les erreurs de manière appropriée.
  • Assurez-vous que les données de réponse envoyées au serveur de confiance permettent de faire la distinction entre les réponses de l'API SafetyNet Attestation et les réponses de l'API Play Integrity.

Serveur de confiance :

  • Examinez la logique de génération de nonce et assurez-vous qu'elle respecte les exigences de l'API Play Integrity.
  • Assurez-vous que le code du serveur peut faire la distinction entre les réponses de l'API SafetyNet Attestation et les réponses de l'API Play Integrity. Assurez-vous que le code analyse et valide ces réponses correctement.
  • Ajoutez une logique pour valider et analyser les réponses de l'API Play Integrity.
  • Étant donné que la nouvelle réponse de l'API Play Integrity fournit des informations supplémentaires, il peut être nécessaire d'améliorer la logique de prise de décision et les données de commentaires renvoyées aux appareils clients. Pour en savoir plus, consultez la section Mappage des réponses de l'API dans cet article.

Encodage du nonce

Un nonce lié à l'intégrité doit être transmis à l'API Play Integrity en tant que String encodé en Base64, sécurisé pour les URL, et non encapsulé. Ce format diffère de l'API SafetyNet Attestation, qui nécessite l'autorisation byte[].

  • Le terme "sécurisé pour les l'URL" désigne l'utilisation de la variante Base64 "sécurisée pour les URL et les noms de fichiers" (voir la section 5 du document RFC 4648), où "-" et "_" sont utilisés à la place de "+" et "/". Pour en savoir plus sur l'encodage Base64, consultez le document RFC 4648.
  • "non encapsulé" signifie que tous les sauts de ligne ont été omis. Cela signifie que le résultat est une seule longue ligne.
.setNonce(Base64.encodeToString(NONCE_BYTES,
        Base64.URL_SAFE | Base64.NO_WRAP))

Assurez-vous également que la génération de nonce est conforme aux consignes de l'API Play Integrity.

Mappage des réponses de l'API

Le tableau suivant met en correspondance les champs de l'API SafetyNet Attestation avec leurs équivalents dans l'API Play Integrity.

API SafetyNet Attestation API Play Integrity Notes
timestampMs requestDetails.timestampMillis
nonce requestDetails.nonce
apkPackageName appIntegrity.packageName
apkCertificateDigestSha256 appIntegrity.certificateSha256Digest Assurez-vous que appRecognitionVerdict est défini sur PLAY_RECOGNIZED
ctsProfileMatch Compilé dans deviceIntegrity.deviceRecognitionVerdict
basicIntegrity Compilé dans deviceIntegrity.deviceRecognitionVerdict
evaluationType Compilé dans deviceIntegrity.deviceRecognitionVerdict
advice Not available
error Not available La liste des libellés d'intégrité des appareils sera vide.

Mise en correspondance des résultats d'intégrité de l'appareil

API SafetyNet Attestation API Play Integrity
ctsProfileMatch basicIntegrity evaluationType deviceRecognitionVerdict
FALSE FALSE Aucun libellé
FALSE TRUE MEETS_BASIC_INTEGRITY
TRUE FALSE Aucun libellé
TRUE TRUE BASIC MEETS_DEVICE_INTEGRITY, MEETS_BASIC_INTEGRITY
TRUE TRUE HARDWARE_BACKED MEETS_STRONG_INTEGRITY, MEETS_DEVICE_INTEGRITY, MEETS_BASIC_INTEGRITY

Vous devrez peut-être configurer l'ensemble des réponses d'intégrité de l'appareil si votre application utilise une stratégie d'application complexe et a besoin de toutes les valeurs possibles.

Logique de nouvelle tentative de l'API Play Integrity

Une application doit effectuer de nouveaux appels d'API pour certains codes d'erreur. Assurez-vous d'avoir examiné tous les codes d'erreur et assurez-vous que l'application relance avec l'intervalle exponentiel entre les tentatives, si nécessaire. Assurez-vous que le délai minimal est d'au moins 5 secondes, augmentant de manière exponentielle (5 s, 10 s, 20 s, 40 s, etc.) afin de laisser à l'API le temps d'évaluer l'intégrité de l'appareil et de l'application.

Remplacement facultatif de l'API App Licensing

Si vous utilisez l'API App Licensing, vous pouvez éventuellement migrer pour utiliser l'API Play Integrity, car un jeton d'API Play Integrity inclut les informations de licence de l'application. Comme pour la migration de l'API SafetyNet Attestation, vous devez vous attendre à ce qu'un certain nombre d'appareils conservent une version plus ancienne de l'application. Votre serveur de confiance doit être capable de traiter à la fois l'API App Licensing et l'API Play Integrity.

Recevoir des réponses jusqu'à la désactivation complète

Si vous n'avez pas encore migré vers l'API Play Integrity ou supprimé SafetyNet Attestation à la date limite de la migration (31 janvier 2024), vous pouvez remplir ce formulaire pour demander une extension. Si une extension est approuvée, votre application continuera de recevoir des réponses de SafetyNet Attestation jusqu'à la date limite d'arrêt complet (31 janvier 2025).