المعالجة

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

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

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

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

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

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

تصدير البيانات الناقصة

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

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

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

CLOSE_UNKNOWN_ACCESS_RISK (نوع الرمز 2)

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

عندما تحتوي السمة environmentDetails.appAccessRiskVerdict.appsDetected على "UNKNOWN_CAPTURING" أو "UNKNOWN_CONTROLLING"، وهذا يعني أن هناك غير معروف التطبيقات التي تعمل على الجهاز والتي يمكن أن تلتقط الشاشة أو التحكُّم في الجهاز.

تصدير البيانات الناقصة

يمكنك عرض مربّع الحوار "CLOSE_UNKNOWN_ACCESS_RISK" لتطلب من المستخدم الإغلاق. كل التطبيقات غير المعروفة التي يمكن أن تصوّر الشاشة أو تتحكَّم في الجهاز. إذا نقر المستخدم على الزر "Close all"، يتم إغلاق كل هذه التطبيقات.

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

مربّع حوار بشأن خطر الوصول غير المعروف القريب

CLOSE_ALL_ACCESS_RISK (نوع الرمز 3)

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

عندما تحتوي السمة environmentDetails.appAccessRiskVerdict.appsDetected على أيٍّ من "KNOWN_CAPTURING" أو "KNOWN_CONTROLLING" أو"UNKNOWN_CAPTURING" أو "UNKNOWN_CONTROLLING"، هذا يعني أن هناك تطبيقات قيد التشغيل على الجهاز مثل أخذ الشاشة أو التحكم في الجهاز.

تصدير البيانات الناقصة

يمكنك عرض مربّع الحوار "CLOSE_ALL_ACCESS_RISK" لتطلب من المستخدم إغلاق كل النتائج. والتطبيقات التي يمكن أن تصوّر الشاشة أو تتحكَّم في الجهاز. إذا نقر المستخدم على الزر "Close all"، يتم إغلاق كل هذه التطبيقات على الخاص بك.

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

مربّع حوار حول إغلاق جميع مخاطر الوصول

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

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

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