التعامل مع رموز الخطأ في واجهة برمجة التطبيقات Play Integrity API

إذا قدَّم أحد التطبيقات طلبًا باستخدام واجهة برمجة التطبيقات Play Integrity API وتعذّر الاتصال، يتم عرض رمز خطأ. يعتمد نوع رمز الخطأ المعروض على نوع الطلب:

  • الطلبات العادية: تعرض واجهة برمجة التطبيقات الخطأ StandardIntegrityErrorCode.
  • الطلبات الكلاسيكية: تعرض واجهة برمجة التطبيقات الخطأ IntegrityErrorCode.

إعادة محاولة الإستراتيجيات

ننصحك باستخدام ميزة "الرقود الأسي" في عمليات Play Integrity التي تحدث في الخلفية ولا تؤثّر في تجربة المستخدِم أثناء الجلسة.

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

بعد حدوث الفشل الأول، ابدأ بمهلة مبدئية تبلغ 5 ثوانٍ قبل إعادة المحاولة.

نفِّذ استراتيجية لإعادة المحاولة تتضمّن أقصى عدد من المحاولات كشرط خروج باستخدام معدّل التأخير المتزايد بشكل كبير في كل مرة (10 ثوانٍ أو 20 ثانية).

وأثناء إجراء هذه المحاولات، تأكَّد من الاتصال بالشبكة ولا تحمِّل الجهاز بشكل زائد.

إذا استمر ظهور الأخطاء بعد ثلاث محاولات لإعادة المحاولة، تعامل مع النتيجة كما لو كان العميل قد فشل جميع عمليات التحقق من السلامة. وقد يرجع الخطأ إلى عدة أسباب، بما في ذلك (على سبيل المثال لا الحصر): استخدام جهاز محمَّل بشكل زائد أو حدوث مشاكل في الاتصال بالشبكة أو حدوث محاولة من أحد المهاجمين.

قيم رموز الخطأ لمكتبة جافا

IntegrityErrorCode StandardIntegrityErrorCode
-1 API_NOT_AVAILABLE API_NOT_AVAILABLE
-2 PLAY_STORE_NOT_FOUND PLAY_STORE_NOT_FOUND
-3 NETWORK_ERROR NETWORK_ERROR
-4 PLAY_STORE_ACCOUNT_NOT_FOUND
-5 APP_NOT_INSTALLED APP_NOT_INSTALLED
-6 PLAY_SERVICES_NOT_FOUND PLAY_SERVICES_NOT_FOUND
-7 APP_UID_MISMATCH APP_UID_MISMATCH
-8 TOO_MANY_REQUESTS TOO_MANY_REQUESTS
-9 CANNOT_BIND_TO_SERVICE CANNOT_BIND_TO_SERVICE
-10 NONCE_TOO_SHORT
-11 NONCE_TOO_LONG
-12 GOOGLE_SERVER_UNAVAILABLE GOOGLE_SERVER_UNAVAILABLE
-13 NONCE_IS_NOT_BASE64
-14 PLAY_STORE_VERSION_OUTDATED PLAY_STORE_VERSION_OUTDATED
-15 PLAY_SERVICES_VERSION_OUTDATED PLAY_SERVICES_VERSION_OUTDATED
-16 CLOUD_PROJECT_NUMBER_IS_INVALID CLOUD_PROJECT_NUMBER_IS_INVALID
-17 CLIENT_TRANSIENT_ERROR REQUEST_HASH_TOO_LONG
-18 CLIENT_TRANSIENT_ERROR
-19 INTEGRITY_TOKEN_PROVIDER_INVALID
-100 INTERNAL_ERROR INTERNAL_ERROR

قيم إضافية لرموز الخطأ للمكتبة الأصلية

IntegrityErrorCode StandardIntegrityErrorCode
-100 INTEGRITY_INTERNAL_ERROR STANDARD_INTEGRITY_INTERNAL_ERROR
-101 INTEGRITY_INITIALIZATION_NEEDED STANDARD_INTEGRITY_INITIALIZATION_NEEDED
-102 INTEGRITY_INITIALIZATION_FAILED STANDARD_INTEGRITY_INITIALIZATION_FAILED
-103 INTEGRITY_INVALID_ARGUMENT STANDARD_INTEGRITY_INVALID_ARGUMENT

رموز الخطأ القابلة لإعادة المحاولة

يرجع سبب هذه الأخطاء أحيانًا إلى الحالات العابرة، وبالتالي يجب عليك إعادة محاولة الاتصال.

NETWORK_ERROR (رمز الخطأ -3)

يشير هذا الخطأ إلى حدوث مشكلة في اتصال الشبكة بين الجهاز وأنظمة Play.

الحل المحتمل

لاسترداد الحساب، اطلب من المستخدم التحقق من الاتصال بالشبكة، واستخدام عمليات إعادة المحاولة البسيطة أو الرقود الأسي الثنائي، اعتمادًا على الإجراء الذي تسبب في حدوث الخطأ.

راجع أيضًا

NETWORK_ERROR للطلبات الكلاسيكية.

TOO_MANY_REQUESTS (رمز الخطأ -8)

يرسل تطبيق الاتصال عددًا كبيرًا جدًا من الطلبات إلى واجهة برمجة التطبيقات وتم تقييده.

الحل المحتمل

  1. طلب زيادة الحد الأقصى اليومي للطلبات
  2. أعِد المحاولة باستخدام رقود أسي.

راجع أيضًا

TOO_MANY_REQUESTS للطلبات الكلاسيكية.

GOOGLE_SERVER_UNAVAILABLE (رمز الخطأ -12)

حدث خطأ داخلي غير معروف في خادم Google.

الحل المحتمل

أعِد المحاولة باستخدام رقود أسي. جرِّب الإبلاغ عن خطأ إذا تعذّر ذلك بشكل منتظم.

راجع أيضًا

GOOGLE_SERVER_UNAVAILABLE للطلبات الكلاسيكية.

CLIENT_TRANSIENT_ERROR (رمز الخطأ -18)

حدث خطأ عابر على جهاز العميل.

بالنسبة إلى طلبات البيانات من واجهة برمجة التطبيقات العادية، تكون هذه الميزة متاحة اعتبارًا من الإصدار 1.3.0 من مكتبة واجهة برمجة التطبيقات Play Integrity API في لغتَي Kotlin وJava والمكوّن الإضافي Google Play Integrity API لـ Unity 1.3.0 أو الإصدارات الأحدث والإصدار 1.13.0 أو إصدار أحدث من Play Core Native SDK.

الحل المحتمل

أعِد المحاولة باستخدام رقود أسي.

راجع أيضًا

CLIENT_TRANSIENT_ERROR للطلبات الكلاسيكية.

ملاحظة: عند إعداد التقارير أثناء استخدام طلب بيانات من واجهة برمجة التطبيقات الكلاسيكية، تكون القيمة المعروضة هي -17.

INTERNAL_ERROR (رمز الخطأ -100)

حدث خطأ داخلي غير معروف.

الحل المحتمل

أعِد المحاولة باستخدام رقود أسي. فكِّر في الإبلاغ عن خطأ إذا تعذّر بشكل متكرر.

راجع أيضًا

INTERNAL_ERROR للطلبات الكلاسيكية.

STANDARD_INTEGRITY_INTERNAL_ERROR (رمز الخطأ -100)

حدث خطأ داخلي غير معروف.

الحل المحتمل

أعِد المحاولة باستخدام رقود أسي. فكِّر في الإبلاغ عن خطأ إذا تعذّر بشكل متكرر.

راجع أيضًا

يمكنك الاطّلاع على INTEGRITY_INTERNAL_ERROR للاطّلاع على الطلبات الكلاسيكية.

STANDARD_INTEGRITY_INITIALIZATION_FAILED (رمز الخطأ -102)

حدث خطأ أثناء إعداد Standard Integrity API.

الحل المحتمل

أعِد المحاولة باستخدام رقود أسي. فكِّر في الإبلاغ عن خطأ إذا تعذّر بشكل متكرر.

راجع أيضًا

يمكنك الاطّلاع على INTEGRITY_INITIALIZATION_FAILED للاطّلاع على الطلبات الكلاسيكية.

رموز الخطأ غير القابلة لإعادة المحاولة

ومن غير المرجّح أن تساعد عمليات إعادة المحاولة التلقائية في هذه الحالات. ومع ذلك، قد تساعد إعادة المحاولة اليدوية إذا عالج المستخدم الشرط الذي تسبب في المشكلة. على سبيل المثال، إذا حدّث المستخدم إصدار "متجر Play" إلى إصدار متوافق، قد تتم إعادة المحاولة يدويًا للعملية الأولية.

API_NOT_AVAILABLE (رمز الخطأ -1)

قد يكون إصدار "متجر Play" المثبَّت على الجهاز قديمًا ولا تتوفّر واجهة برمجة التطبيقات Integrity API. يُحتمَل أيضًا أنّ واجهة برمجة التطبيقات Integrity API غير مفعَّلة في Google Play Console.

الحل المحتمل

  • تأكَّد من أنّ واجهة برمجة التطبيقات Integrity API مفعَّلة في Google Play Console.
  • اطلب من المستخدم تحديث "متجر Play".

راجع أيضًا

يمكنك الاطّلاع على API_NOT_AVAILABLE لمعرفة الطلب الكلاسيكي.

PLAY_STORE_NOT_FOUND (رمز الخطأ -2)

لم يتم العثور على تطبيق رسمي لـ "متجر Play" على الجهاز.

الحل المحتمل

اطلب من المستخدم تثبيت "متجر Google Play" أو تفعيله.

راجع أيضًا

يمكنك الاطّلاع على PLAY_STORE_NOT_FOUND لمعرفة الطلب الكلاسيكي.

PLAY_STORE_ACCOUNT_NOT_FOUND (رمز الخطأ -4)

ملاحظة: لا يتم الإبلاغ عن هذا الإجراء إلا للطلبات الكلاسيكية من خلال IntegrityErrorCode.

لم يتم العثور على حساب على "متجر Play" على الجهاز. يُرجى العِلم أنّ واجهة برمجة التطبيقات Play Integrity API تدعم الآن الطلبات التي لم تتم مصادقتها. يُستخدم رمز الخطأ هذا فقط في إصدارات "متجر Play" القديمة التي تفتقر إلى الدعم.

الحل المحتمل

اطلب من المستخدم تحديث التطبيق وتسجيل الدخول إلى "متجر Google Play".

APP_NOT_INSTALLED (رمز الخطأ -5)

تَطْبِيقْ الِاتِّصَالْ غَيْرْ مُثَبَّتْ. حدث خطأ ما (ربما هجوم).

الحل المحتمل

غير قابلة للتنفيذ: تعامل مع النتيجة كما لو أن العميل لم يجتَز جميع فحوصات النزاهة.

راجع أيضًا

يمكنك الاطّلاع على APP_NOT_INSTALLED لمعرفة الطلب الكلاسيكي.

PLAY_SERVICES_NOT_FOUND (رمز الخطأ -6)

خدمات Play غير متاحة أو يجب تحديثها.

الحل المحتمل

اطلب من المستخدم تثبيت "خدمات Play" أو تحديثها أو تفعيلها.

راجع أيضًا

يمكنك الاطّلاع على APP_NOT_INSTALLED لمعرفة الطلب الكلاسيكي.

APP_UID_MISMATCH (رمز الخطأ -7)

المعرّف الفريد لتطبيق الاتصال (معرّف المستخدم) لا يتطابق مع المعرّف الفريد لتطبيق "مدير الحزم".

الحل المحتمل

غير قابلة للتنفيذ: تعامل مع النتيجة كما لو أن العميل لم يجتَز جميع فحوصات النزاهة.

راجع أيضًا

يمكنك الاطّلاع على APP_UID_MISMATCH لمعرفة الطلب الكلاسيكي.

CANNOT_BIND_TO_SERVICE (رمز الخطأ -9)

تعذَّر ربط الخدمة في "متجر Play". قد يرجع ذلك إلى تثبيت إصدار قديم من متجر Play على الجهاز.

الحل المحتمل

اطلب من المستخدم تحديث "متجر Google Play".

راجع أيضًا

يمكنك الاطّلاع على CANNOT_BIND_TO_SERVICE لمعرفة الطلب الكلاسيكي.

NONCE_TOO_SHORT (رمز الخطأ -10)

ملاحظة: لا يتم الإبلاغ عن هذا الإجراء إلا للطلبات الكلاسيكية من خلال IntegrityErrorCode.

مدة التعليقات قصيرة جدًا. يجب ألا يقل حجم nonce عن 16 بايت قبل ترميز base64.

الحل المحتمل

يُرجى إعادة المحاولة باستخدام رقم GTIN أطول.

NONCE_TOO_LONG (رمز الخطأ -11)

ملاحظة: لا يتم الإبلاغ عن هذا الإجراء إلا للطلبات الكلاسيكية من خلال IntegrityErrorCode.

مدة بدون اسم طويلة جدًا. يجب أن تكون قيمة nonce أقل من 500 بايت قبل ترميز base64.

الحل المحتمل

يُرجى إعادة المحاولة باستخدام رقم تعريفي أقصر.

NONCE_IS_NOT_BASE64 (رمز الخطأ -13)

ملاحظة: لا يتم الإبلاغ عن هذا الإجراء إلا للطلبات الكلاسيكية من خلال IntegrityErrorCode.

لم يتم ترميز Nonce كسلسلة بدون التفاف base64 على الويب.

الحل المحتمل

يُرجى إعادة المحاولة باستخدام رقم nonce بالتنسيق الصحيح.

PLAY_STORE_VERSION_OUTDATED (رمز الخطأ -14)

يجب تحديث تطبيق "متجر Google Play".

الحل المحتمل

اطلب من المستخدم تحديث "متجر Google Play".

راجع أيضًا

يمكنك الاطّلاع على PLAY_STORE_VERSION_OUTDATED لمعرفة الطلب الكلاسيكي.

PLAY_SERVICES_VERSION_OUTDATED (رمز الخطأ -15)

يجب تحديث "خدمات Google Play".

الحل المحتمل

اطلب من المستخدم تحديث "خدمات Google Play".

راجع أيضًا

يمكنك الاطّلاع على PLAY_SERVICES_VERSION_OUTDATED لمعرفة الطلب الكلاسيكي.

CLOUD_PROJECT_NUMBER_IS_INVALID (رمز الخطأ -16)

رقم المشروع على السحابة الإلكترونية الذي تم تقديمه غير صالح.

الحل المحتمل

استخدِم رقم المشروع على Google Cloud للمشروع الذي فعّلت فيه واجهة برمجة التطبيقات Play Integrity API.

راجع أيضًا

يمكنك الاطّلاع على CLOUD_PROJECT_NUMBER_IS_INVALID لمعرفة الطلب الكلاسيكي.

REQUEST_HASH_TOO_LONG (رمز الخطأ -17)

ملاحظة: لا يتم الإبلاغ عن هذا الإجراء إلا عند استخدام الطلب العادي حتى StandardIntegrityErrorCode.

مادة عرض requestHash التي تم تقديمها طويلة جدًا. يجب أن يكون طول السمة requestHash أقل من 500 حرف.

الحل المحتمل

يُرجى إعادة المحاولة باستخدام requestHash أقصر.

INTEGRITY_TOKEN_PROVIDER_INVALID (رمز الخطأ -19)

ملاحظة: يتمّ الإبلاغ عن هذا الإجراء فقط للطلب العادي حتى StandardIntegrityErrorCode.

قيمة StandardIntegrityTokenProvider غير صالحة. لا يتوفّر رمز الخطأ هذا إلا لطلبات البيانات من واجهة برمجة التطبيقات العادية، حيث يمكن استخدامه بدءًا من إصدار المكتبة 1.3.0 للّغات البرمجية Kotlin وJava ومكوّن Google Play Integrity المكون الإضافي لنظام Unity 1.3.0 أو إصدار أحدث والإصدار 1.13.0 من حزمة Play Core Native SDK أو إصدار أحدث.

الحل المحتمل

طلب موفّر خدمة رمز مميّز جديد للسلامة

STANDARD_INTEGRITY_INITIALIZATION_NEEDED (رمز الخطأ -101)

لم يتم إعداد StandardIntegrityManager.

الحل المحتمل

يُرجى الاتصال بالرقم StandardIntegrityManager_init() أولاً.

راجع أيضًا

يمكنك الاطّلاع على INTEGRITY_INITIALIZATION_NEEDED للاطّلاع على الطلبات الكلاسيكية.

STANDARD_INTEGRITY_INVALID_ARGUMENT (رمز الخطأ -103)

تم تمرير وسيطة غير صالحة إلى Standard Integrity API.

الحل المحتمل

يُرجى إعادة المحاولة باستخدام الوسيطة الصحيحة.

راجع أيضًا

يمكنك الاطّلاع على INTEGRITY_INVALID_ARGUMENT للتعرّف على الطلبات الكلاسيكية.