Działania naprawcze

Na tej stronie dowiesz się, jak rozwiązywać problemy z ocenami integralności.

Po wysłaniu żądania tokena integralności możesz wyświetlić Odtwórz okno użytkownikowi. Okno dialogowe można wyświetlić, gdy jest więcej z oceną integralności. Okno wyświetla się u góry aplikacji, i zachęca użytkowników do rozwiązania problemu. Po zamknięciu okna możesz sprawdzić, czy problem został rozwiązany, przesyłając kolejną prośbę do zespołu ds. integralności API.

Okna integralności

GET_LICENSED (kod typu 1)

Problem z oceną

Gdy appLicensingVerdict == "UNLICENSED". Oznacza to, że konto użytkownika jest bez licencji. Oznacza to, że nie zainstalował ani nie kupił aplikacji w Google Play.

Działania naprawcze

Możesz wyświetlić okno GET_LICENSED, by poprosić użytkownika o pobranie aplikacji Google Play. Jeśli użytkownik zaakceptuje zaproszenie, jego konto otrzyma licencję (appLicensingVerdict == "LICENSED"). Aplikacja zostanie dodana do konta Google użytkownika Biblioteka Google Play i Google Play mogą dostarczać aktualizacje aplikacji w Twoim imieniu.

Przykładowy UX

Okno odtwarzania: GET_LICENSED

CLOSE_UNKNOWN_ACCESS_RISK (kod typu 2)

Problem z oceną

Gdy environmentDetails.appAccessRiskVerdict.appsDetected zawiera "UNKNOWN_CAPTURING" lub "UNKNOWN_CONTROLLING", oznacza to, że są nieznane działające na urządzeniu aplikacje, które mogą rejestrować to, co widać na ekranie, sterowanie urządzeniem.

Działania naprawcze

Możesz wyświetlić okno CLOSE_UNKNOWN_ACCESS_RISK, aby poprosić użytkownika o zamknięcie wszystkich nieznanych aplikacji, które mogą rejestrować to, co widać na ekranie, lub sterować urządzeniem. Jeśli użytkownik kliknie przycisk Close all, wszystkie takie aplikacje zostaną zamknięte.

Przykładowy UX

Okno zamykania nieznanego ryzyka dostępu

CLOSE_ALL_ACCESS_RISK (kod typu 3)

Problem z oceną

Gdy environmentDetails.appAccessRiskVerdict.appsDetected zawiera dowolne z tych "KNOWN_CAPTURING", "KNOWN_CONTROLLING","UNKNOWN_CAPTURING" lub "UNKNOWN_CONTROLLING", co oznacza, że na urządzeniu są uruchomione aplikacje, które może rejestrować to, co widać na ekranie, lub sterować urządzeniem.

Działania naprawcze

Możesz wyświetlić okno CLOSE_ALL_ACCESS_RISK, aby poprosić użytkownika o zamknięcie wszystkich które mogą rejestrować to, co widać na ekranie, lub sterować urządzeniem. Jeśli użytkownik kliknie przycisk Close all, wszystkie takie aplikacje zostaną zamknięte na urządzenia.

Przykładowy UX

Okno zamykania całego ryzyka dostępu

Poproś o okno integralności

Gdy klient poprosi o token integralności, możesz użyć metody oferowanej w interfejs StandardIntegrityToken (Standard API) IntegrityTokenResponse (klasyczny interfejs API): showDialog(Activity activity, int integrityDialogTypeCode).

Poniżej znajdziesz instrukcje, jak za pomocą interfejsu Play Integrity API wyświetlać Okno GET_LICENSED:

  1. Poproś o token integralności z aplikacji i wyślij go na swój serwer. Możesz użyć żądania standardowego lub klasycznego.

    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. Odszyfruj token integralności na serwerze i sprawdź, czy appLicensingVerdict. Może to wyglądać mniej więcej tak:

    // Licensing issue
    {
      ...
      accountDetails: {
        appLicensingVerdict: "UNLICENSED"
      }
    }
    
  3. Jeśli token zawiera ciąg appLicensingVerdict: "UNLICENSED", odpowiedz aplikacji. po wysłaniu żądania wyświetlonego okna licencjonowania:

    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. W aplikacji zadzwoń pod numer showDialog i podaj kod pobrany z serwer:

    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. Okno jest wyświetlane nad podanym działaniem. Gdy użytkownik zamknął okno, zadanie zakończyło się wyświetleniem kodu odpowiedzi.

  6. (Opcjonalnie) Aby wyświetlić dalsze okna, poproś o kolejny token. Jeśli masz standardowych żądań, musisz przygotować z dostawcą tokena, aby uzyskać nową ocenę.