المعالجة

توضّح هذه الصفحة كيفية التعامل مع المشاكل المتعلّقة ببيانات السلامة.

عند طلب رمز مميّز للسلامة، يتوفّر لك خيار عرض مربّع حوار Google Play للمستخدم. يمكنك عرض مربع الحوار عندما يكون هناك مشكلة أو أكثر في بيان السلامة. يظهر مربع الحوار في أعلى التطبيق، ويطلب من المستخدمين حل سبب المشكلة. بعد إغلاق مربّع الحوار، يمكنك التأكّد من أنّ المشكلة قد تم حلّها من خلال طلب آخر مُرسَل إلى Integrity API.

مربّعات حوار التكامل

GET_LICENSED (رمز النوع 1)

مشكلة في البيان

عند appLicensingVerdict == "UNLICENSED". هذا يعني أنّ حساب المستخدم غير مرخّص. بمعنى آخر، لم يثبِّتوا التطبيق أو يشتروه من Google Play.

المعالجة

يمكنك عرض مربّع الحوار GET_LICENSED لمطالبة المستخدم بتنزيل تطبيقك من Google Play. في حال قبول المستخدم، سيصبح حساب المستخدم مرخَّصًا (appLicensingVerdict == "LICENSED"). تتم إضافة التطبيق إلى مكتبة المستخدم في Google Play ويمكن لتطبيق Google Play عرض تحديثات التطبيقات نيابةً عنك.

مثال على تجربة المستخدم

مربع حوار التشغيل GET_LICENSED

طلب مربّع حوار سلامة

عندما يطلب العميل رمزًا مميّزًا لسلامة، يمكنك استخدام الطريقة المقدَّمة في StandardIntegrityToken (واجهة برمجة التطبيقات العادية) وIntegrityTokenResponse (واجهة برمجة التطبيقات الكلاسيكية): showDialog(Activity activity, int integrityDialogTypeCode).

توضّح الخطوات التالية كيفية استخدام واجهة برمجة التطبيقات Play Integrity API لعرض مربّع الحوار GET_LICENSED:

  1. اطلب رمزًا مميّزًا للسلامة من تطبيقك وأرسِله إلى خادمك. يمكنك استخدام الطلب العادي أو الكلاسيكي.

    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. على الخادم، عليك فك تشفير الرمز المميّز للسلامة والتحقّق من الحقل appLicensingVerdict. يمكن أن يبدو مشابهًا لما يلي:

    // Licensing issue
    {
      ...
      accountDetails: {
        appLicensingVerdict: "UNLICENSED"
      }
    }
    
  3. إذا كان الرمز المميّز يحتوي على appLicensingVerdict: "UNLICENSED"، يمكنك الردّ على عميل التطبيق وطلب منه عرض مربّع حوار الترخيص:

    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. يمكنك الاتصال بـ showDialog في تطبيقك وإبلاغك بالرمز المطلوب الذي تم استرداده من الخادم:

    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. يظهر مربّع الحوار في أعلى النشاط المتوفّر. عندما يغلق المستخدم مربع الحوار، تكتمل المهمة برمز استجابة.

  6. (اختياري) اطلب رمزًا مميزًا آخر لعرض أي مربّعات حوار أخرى. إذا قدَّمت طلبات عادية، عليك إعداد مقدّم خدمة الرمز المميّز مرة أخرى للحصول على قرار جديد.