Çözüm

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

Bütünlük jetonu istendiğinde kullanıcıya bir Google Play iletişim kutusu gösterebilirsiniz. Entegrasyon kararıyla ilgili bir veya daha fazla sorun olduğunda iletişim kutusunu görüntüleyebilirsiniz. İletişim kutusu, uygulamanızın üst kısmında görüntülenir ve kullanıcılardan sorunun nedenini çözmelerini ister. İletişim kutusu kapatıldıktan sonra Integrity API'ye yapılan başka bir istekle sorunun düzeltildiğini doğrulayabilirsiniz.

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

GET_LICENSED (Tür Kodu 1)

Karar sorunu

appLicensingVerdict == "UNLICENSED" olduğunda. Bu, kullanıcı hesabının lisansının kaldırıldığı anlamına gelir. Diğer bir deyişle, kullanıcı uygulamayı Google Play'den yüklememiş veya satın almamıştır.

Çözüm

Kullanıcının uygulamanızı Google Play'den indirmesini istemek için GET_LICENSED iletişim kutusunu gösterebilirsiniz. Kullanıcı kabul ederse kullanıcı hesabı lisanslı (appLicensingVerdict == "LICENSED") olur. Uygulama kullanıcının Google Play kitaplığına eklenir ve Google Play sizin adınıza uygulama güncellemeleri gönderebilir.

Örnek kullanıcı deneyimi

GET_LICENSED Oynatma iletişim kutusu

Bütünlük isteğinde bulunma iletişim kutusu

İstemci bütünlük jetonu istediğinde StandardIntegrityToken (Standard API) ve IntegrityTokenResponse'ta (Klasik API) sunulan yöntemi kullanabilirsiniz: showDialog(Activity activity, int integrityDialogTypeCode).

Aşağıdaki adımlarda, GET_LICENSED iletişim kutusunu göstermek için Play Integrity API'yi nasıl kullanabileceğiniz özetlenmektedir:

  1. Uygulamanızdan 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ını kontrol edin. Bu simge aşağıdaki gibi görünebilir:

    // Licensing issue
    {
      ...
      accountDetails: {
        appLicensingVerdict: "UNLICENSED"
      }
    }
    
  3. Jeton appLicensingVerdict: "UNLICENSED" içeriyorsa uygulama istemcinize yanıt vererek lisanslama iletişim kutusunun gösterilmesini isteyin:

    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, sunucunuzdan alınan istenen kodu kullanarak showDialog numaralı telefonu arayın:

    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: Task<Int> =
        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.
      Task<Integer> integrityDialogResponseCode =
          tokenResponse.showDialog(activity, showDialogType);
      // Handle response code, call the Integrity API again to confirm that
      // verdicts have been resolved.
    }
    
    
  5. İletişim kutusu, sağlanan etkinliğin üstünde gösterilir. Kullanıcı iletişim kutusunu kapattığında Görev, bir yanıt koduyla tamamlanır.

  6. (İsteğe bağlı) Başka iletişim kutuları görüntülemek için başka bir jeton isteyin. Standart istekler yaparsanız yeni bir karar almak için jeton sağlayıcıyı tekrar çalıştırmanız gerekir.