Fehlerbehebung

Auf dieser Seite wird beschrieben, wie Sie mit Problemen mit Integritätsergebnissen umgehen.

Wenn ein Integritätstoken angefordert wird, können Sie ein Google-Konto Dialogfeld für den Nutzer abspielen. Das Dialogfeld kann angezeigt werden, wenn mindestens ein Probleme mit dem Integritätsergebnis. Das Dialogfeld wird über der App angezeigt. und fordert Nutzer auf, die Ursache des Problems zu beheben. Nach dem Schließen des Dialogfelds können Sie mit einer weiteren Anfrage an die Integrity API prüfen, der API erstellen.

Dialogfelder zur Integrität

GET_LicenseD (Typcode 1)

Problem mit dem Ergebnis

Wenn appLicensingVerdict == "UNLICENSED". Das bedeutet, dass das Nutzerkonto nicht lizenziert. Mit anderen Worten: Sie haben die App nicht bei Google Play installiert oder gekauft.

Fehlerbehebung

Du kannst das Dialogfeld GET_LICENSED einblenden, um den Nutzer aufzufordern, deine App herunterzuladen Google Play Wenn der Nutzer akzeptiert, wird das Nutzerkonto lizenziert (appLicensingVerdict == "LICENSED") Die App wird dem Google-Konto des Nutzers hinzugefügt, Die Play-Mediathek und Google Play können App-Updates in deinem Namen senden.

Beispiel-UX

Dialogfeld für Wiedergabe GET_LIZENZ

CLOSE_UNKNOWN_ACCESS_RISK (Typcode 2)

Problem mit dem Ergebnis

Wenn environmentDetails.appAccessRiskVerdict.appsDetected enthält "UNKNOWN_CAPTURING" oder "UNKNOWN_CONTROLLING" bedeutet, dass unbekannte Daten vorhanden sind. die auf dem Gerät ausgeführt werden, die Bildschirmaufzeichnung oder dem Steuern des Geräts.

Fehlerbehebung

Sie können das Dialogfeld CLOSE_UNKNOWN_ACCESS_RISK anzeigen, um den Nutzer zum Schließen aufzufordern Alle unbekannten Apps, mit denen möglicherweise der Bildschirm aufgenommen oder das Gerät gesteuert wird. Wenn der Nutzer auf die Schaltfläche „Close all“ tippt, werden alle Apps geschlossen.

Beispiel-UX

Dialogfeld zum Risiko des Schließens von unbekanntem Zugriff

CLOSE_ALL_ACCESS_RISK (Typcode 3)

Problem mit dem Ergebnis

Wenn environmentDetails.appAccessRiskVerdict.appsDetected einen der folgenden Werte enthält: "KNOWN_CAPTURING", "KNOWN_CONTROLLING","UNKNOWN_CAPTURING" oder "UNKNOWN_CONTROLLING" bedeutet, dass auf dem Gerät Apps ausgeführt werden, die z. B. den Bildschirm aufnehmen oder das Gerät steuern.

Fehlerbehebung

Sie können das Dialogfeld CLOSE_ALL_ACCESS_RISK einblenden, um den Nutzer aufzufordern, alle zu schließen z. B. Bildschirmaufnahmen oder Gerätesteuerung. Wenn der Nutzer auf die Schaltfläche „Close all“ tippt, werden alle entsprechenden Apps auf dem .

Beispiel-UX

Dialogfeld zum Schließen des gesamten Zugriffsrisikos

Dialogfeld zum Anfordern einer Integrität

Wenn der Client ein Integritätstoken anfordert, können Sie die in StandardIntegrityToken (Standard API) und IntegrityTokenResponse (Classic API): showDialog(Activity activity, int integrityDialogTypeCode)

In den folgenden Schritten wird beschrieben, wie du die Play Integrity API verwenden kannst, um die Dialogfeld GET_LicenseD:

  1. Fordern Sie ein Integritätstoken von Ihrer App an und senden Sie es an Ihren Server. Sie können die Standard- oder die klassische Anfrage verwenden.

    Kotlin

    // Request an integrity token
    val tokenResponse: StandardIntegrityToken = requestIntegrityToken()
    // Send token to app server and get response on what to do next
    val yourServerResponse: YourServerResponse = sendToServer(tokenResponse.token())
    

    Java

    // Request an integrity token
    StandardIntegrityToken tokenResponse = requestIntegrityToken();
    // Send token to app server and get response on what to do next
    YourServerResponse yourServerResponse = sendToServer(tokenResponse.token());
    
  2. Entschlüsseln Sie auf Ihrem Server das Integritätstoken und prüfen Sie die appLicensingVerdict. Sie könnte etwa so aussehen:

    // Licensing issue
    {
      ...
      accountDetails: {
        appLicensingVerdict: "UNLICENSED"
      }
    }
    
  3. Wenn das Token appLicensingVerdict: "UNLICENSED" enthält, antworten Sie der App. Client anfordern, wird das Lizenzierungsdialogfeld angezeigt:

    Kotlin

    private fun getDialogTypeCode(integrityToken: String): Int{
    // Get licensing verdict from decrypted and verified integritytoken
    val licensingVerdict: String = getLicensingVerdictFromDecryptedToken(integrityToken)
    
    return if (licensingVerdict == "UNLICENSED") {
           1 // GET_LICENSED
       } else 0
    }
    

    Java

    private int getDialogTypeCode(String integrityToken) {
      // Get licensing verdict from decrypted and verified integrityToken
      String licensingVerdict = getLicensingVerdictFromDecryptedToken(integrityToken);
    
      if (licensingVerdict.equals("UNLICENSED")) {
        return 1; // GET_LICENSED
      }
      return 0;
    }
    
  4. Rufen Sie in Ihrer App showDialog auf und geben Sie dabei den angeforderten Code aus Ihrem Server:

    Kotlin

    // Show dialog as indicated by the server
    val showDialogType: Int? = yourServerResponse.integrityDialogTypeCode()
    if (showDialogType != null) {
        // Call showDialog with type code, the dialog will be shown on top of the
        // provided activity and complete when the dialog is closed.
        val integrityDialogResponseCode: TaskI<nt >=
        tokenResponse.showDialog(activity, showDialogType)
        // Handle response code, call the Integrity API again to confirm that
        // verdicts have been resolved.
    }
    

    Java

    // Show dialog as indicated by the server
    @Nullable Integer showDialogType = yourServerResponse.integrityDialogTypeCode();
    if (showDialogType != null) {
      // Call showDialog with type code, the dialog will be shown on top of the
      // provided activity and complete when the dialog is closed.
      TaskI<nteger >integrityDialogResponseCode =
          tokenResponse.showDialog(activity, showDialogType);
      // Handle response code, call the Integrity API again to confirm that
      // verdicts have been resolved.
    }
    
  5. Das Dialogfeld wird über der angegebenen Aktivität angezeigt. Wenn der Nutzer das Dialogfeld geschlossen hat, wird die Aufgabe mit einem Antwortcode abgeschlossen.

  6. Optional: Fordern Sie ein weiteres Token an, damit weitere Dialogfelder angezeigt werden. Wenn Sie Standardanfragen gehören, müssen Sie eine Aufwärmphase um ein neues Ergebnis zu erhalten.