Çözüm

Bu sayfada, entegrasyon kararlarıyla ilgili sorunların nasıl ele alınacağı açıklanmaktadır.

Bütünlük jetonu istendiğinde bir Google Cloud Search Console'u Kullanıcıya yönelik iletişim kutusunu oynat. İletişim kutusunu, bir veya daha fazla bağlantı olduğunda sorunları gidermeye çalışır. İletişim, uygulamanızın üst tarafında gösterilir. ve kullanıcılardan sorunun nedenini çözmelerini ister. İletişim kutusu kapatıldığında Integrity'ye bir istek daha göndererek sorunun düzeltildiğini doğrulayabilirsiniz API'ye gidin.

Bütünlük iletişim kutuları

GET_LICENSED (Tür Kodu 1)

Sonuç sorunu

appLicensingVerdict == "UNLICENSED" olduğunda. Bu, kullanıcı hesabının lisanssız. Yani uygulamayı Google Play'den yüklememiş veya satın almamıştır.

Çözüm

Kullanıcının uygulamanızı şuradan almasını istemek için GET_LICENSED iletişim kutusunu gösterebilirsiniz: Google Play Kullanıcı kabul ederse kullanıcının hesabına lisans verilir (appLicensingVerdict == "LICENSED"). Uygulama, kullanıcının Google Play kitaplığı ve Google Play sizin adınıza uygulama güncellemeleri gönderebilir.

Örnek kullanıcı deneyimi

GET_LICENSED Play iletişim kutusu

CLOSE_UNKNOWN_ACCESS_RISK (Kod 2'yi yazın)

Sonuç sorunu

environmentDetails.appAccessRiskVerdict.appsDetected şunu içerdiğinde: "UNKNOWN_CAPTURING" veya "UNKNOWN_CONTROLLING", bilinmeyen öğe olduğu anlamına gelir cihazda çalışan, ekranı kaydedebilecek veya cihazı kontrol ediyor.

Çözüm

CLOSE_UNKNOWN_ACCESS_RISK iletişim kutusunu, kullanıcıdan kapatmasını istemek için gösterebilirsiniz ekranı kaydedebilecek veya cihazı kontrol edebilecek tüm bilinmeyen uygulamalar. Kullanıcı Close all düğmesine dokunursa bu tür uygulamaların tümü kapatılır.

Örnek kullanıcı deneyimi

Bilinmeyen erişim riskini kapatmayla ilgili iletişim kutusu

CLOSE_ALL_ACCESS_RISK (Tür Kodu 3)

Sonuç sorunu

environmentDetails.appAccessRiskVerdict.appsDetected şunlardan herhangi birini içerdiğinde "KNOWN_CAPTURING", "KNOWN_CONTROLLING","UNKNOWN_CAPTURING" veya "UNKNOWN_CONTROLLING", cihazda çalışan uygulamalar olduğu anlamına geliyor. ekranı kaydediyor veya cihazı kontrol ediyor olabilir.

Çözüm

CLOSE_ALL_ACCESS_RISK iletişim kutusunu, kullanıcıdan tüm içeriği kapatmasını istemek için gösterebilirsiniz ekranı kaydedebilecek veya cihazı kontrol edebilecek uygulamalar. Kullanıcı Close all düğmesine dokunursa bu tür uygulamaların tümü olanak tanır.

Örnek kullanıcı deneyimi

Tüm erişim riskini kapatmayla ilgili iletişim kutusu

Bütünlük isteme iletişim kutusu

İstemci bir bütünlük jetonu istediğinde aşağıdaki yöntemi kullanabilirsiniz: StandardIntegrityToken (Standard API) ve IntegrityTokenResponse (Klasik API): showDialog(Activity activity, int integrityDialogTypeCode).

Aşağıdaki adımlarda, kullanıcıların uygulamanızı bulabilmeleri için Play Integrity API'yi GET_LICENSED iletişim kutusu:

  1. Uygulamanızdan bir bütünlük jetonu isteyin ve jetonu sunucunuza gönderin. Standart veya Klasik isteği kullanabilirsiniz.

    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. Sunucunuzda bütünlük jetonunun şifresini çözün ve appLicensingVerdict alanı boş bırakılamaz. Aşağıdaki gibi görünebilir:

    // Licensing issue
    {
      ...
      accountDetails: {
        appLicensingVerdict: "UNLICENSED"
      }
    }
    
  3. Jeton appLicensingVerdict: "UNLICENSED" içeriyorsa uygulamanıza yanıt verin lisans iletişim kutusunu göstermesini istiyorsanız:

    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. Uygulamanızda, showDialog sunucu:

    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. İletişim, sağlanan etkinliğin üzerinde gösterilir. Kullanıcı iletişim kutusunu kapattığınızda Görev, bir yanıt koduyla tamamlanır.

  6. (İsteğe bağlı) Diğer iletişim kutularını görüntülemek için başka bir jeton isteyin. Bir bir istek varsa yeni bir karar almak için jeton sağlayıcıya tekrar gönderin.