المشاكل الشائعة والأخطاء المتعلقة بالإبلاغ

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

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

هناك مرحلتان مختلفتان يجب التحقّق منهما عند تطوير إشعارات الدفع على الويب واختبارها، لكل منهما مجموعة من المشاكل الشائعة:

  • إرسال رسالة: تأكَّد من إرسال الرسائل بنجاح. من المفترض أن يظهر لك رمز HTTP‏ 201. إذا لم تكن :
    • التحقق من أخطاء التفويض: إذا تلقيت رسالة خطأ بشأن التفويض، راجِع قسم مشاكل التفويض.
    • أخطاء أخرى في واجهة برمجة التطبيقات: إذا تلقّيت استجابة برمز حالة غير 201، راجِع قسم رموز حالة HTTP للحصول على إرشادات حول سبب المشكلة.
  • تلقّي رسالة: إذا كان بإمكانك إرسال رسالة بنجاح، ولكن لم يتم استلام الرسالة على المتصفّح:

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

قبل البدء، أودّ الإشارة إلى أنّ Firefox و Mozilla AutoPush Service يتضمّنان رسائل خطأ رائعة. إذا واجهت مشكلة ولم تكن متأكّدًا من سببها، يمكنك اختبار الإجراء في Firefox لمعرفة ما إذا كانت ظهرت لك رسالة خطأ أكثر فائدة.

مشاكل التفويض

إنّ مشاكل التفويض هي من بين المشاكل الأكثر شيوعًا التي يواجهها المطوّرون عند البدء باستخدام إشعارات الدفع على الويب. تحدث هذه المشكلة عادةً بسبب مشكلة في إعداد مفاتيح خادم التطبيقات (المعروفة أيضًا باسم مفاتيح VAPID) للموقع الإلكتروني.

إنّ أسهل طريقة لتفعيل ميزة "الدفع" في كلّ من Firefox وChrome هي توفير applicationServerKey في طلب subscribe(). الجانب السلبي هو أنّ أي تناقض بين مفاتيح الواجهة الأمامية والخادم سيؤدي إلى خطأ في التفويض.

على Chrome و‏FCM

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

سيظهر لك خطأ UnauthorizedRegistration في أيّ من الحالات التالية:

  • في حال تعذّر تحديد عنوان Authorization في الطلب المُرسَل إلى خدمة "المراسلة عبر السحابة الإلكترونية من Firebase".
  • لا يتطابق مفتاح التطبيق المستخدَم لاشتراك المستخدم مع المفتاح المستخدَم للتوقيع على عنوان التفويض.
  • تاريخ انتهاء الصلاحية غير صالح في رمز JWT، أي أنّ تاريخ انتهاء الصلاحية يتجاوز 24 ساعة أو انتهت صلاحية رمز JWT.
  • تم تنسيق رمز JWT بشكل غير صحيح أو يحتوي على قيم غير صالحة.

يظهر ردّ الخطأ الكامل على النحو التالي:

<html>
  <head>
    <title>UnauthorizedRegistration</title>
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <h1>UnauthorizedRegistration</h1>

    <h2>Error 400</h2>
  </body>
</html>

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

Firefox وMozilla AutoPush

يوفّر كل من Firefox وMozilla AutoPush مجموعة من رسائل الخطأ المناسبة لمشاكل Authorization.

سيصلك أيضًا استجابة خطأ Unauthorized من Mozilla AutoPush في حال عدم تضمين العنوان Authorization في طلب إعلام العميل.

{
  "errno": 109,
  "message": "Request did not validate missing authorization header",
  "code": 401,
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "error": "Unauthorized"
}

إذا انتهت صلاحية JWT، ستتلقّى أيضًا خطأ Unauthorized مع رسالة توضّح أنّ الرمز المميَّز انتهت صلاحيته.

{
  "code": 401,
  "errno": 109,
  "error": "Unauthorized",
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "message": "Request did not validate Invalid bearer token: Auth expired"
}

إذا اختلفت مفاتيح خادم التطبيق بين وقت اشتراك المستخدم ووقت توقيع عنوان التفويض، سيتم عرض Not Found خطأ:

{
  "errno": 102,
  "message": "Request did not validate invalid token",
  "code": 404,
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "error": "Not Found"
}

أخيرًا، إذا كانت لديك قيمة غير صالحة في JWT (على سبيل المثال إذا كانت قيمة "alg" قيمة غير متوقعة)، فستتلقى الخطأ التالي من Mozilla AutoPush:

{
  "code": 401,
  "errno": 109,
  "error": "Unauthorized",
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "message": "Request did not validate Invalid Authorization Header"
}

رموز حالة HTTP

هناك مجموعة من المشاكل التي يمكن أن تؤدي إلى ظهور رمز استجابة غير 201 من خدمة الإرسال الفوري. في ما يلي قائمة برموز حالة HTTP ومعنى كل منها في ما يتعلق بالدفع عبر الويب.

رمز الحالة الوصف
429 عدد الطلبات كبير جدًا. وصل خادم التطبيقات إلى الحد الأقصى لمعدّل الإرسال في خدمة الإرسال الفوري. يجب أن تتضمن الاستجابة من الخدمة العنوان "إعادة المحاولة بعد" للإشارة إلى المدة قبل إجراء طلب آخر.
400 الطلب غير صالح. أحد العناوين غير صالح أو معدّ بتنسيق غير سليم.
404 غير موجودة في هذه الحالة، عليك حذف PushSubscription من الخلفية والانتظار إلى أن تتوفر فرصة لإعادة اشتراك المستخدم.
410 اختفت لم يعد الاشتراك صالحًا ويجب إزالته من الجهة الخلفية. يمكن إعادة إنتاج هذا الخطأ عن طريق استدعاء unsubscribe()‎ على PushSubscription‎.
413 حجم الحمولة كبير جدًا. الحد الأدنى لحجم الحمولة التي يجب أن تسمح بها خدمة الدفع هو 4096 بايت (أو 4 كيلوبايت). ويمكن أن يؤدي أي حجم أكبر إلى ظهور هذا الخطأ.

إذا لم يكن رمز حالة HTTP مدرجًا في هذه القائمة ولم تكن رسالة الخطأ مفيدة، راجِع مواصفات بروتوكول Web Push لمعرفة ما إذا كانت هناك إشارة إلى رمز الحالة مع سيناريو يشير إلى الوقت الذي يمكن فيه استخدام رمز الحالة هذا.

مشكلة في تشفير الحمولة

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

في هذه الحالة، من المفترض أن تظهر لك رسالة خطأ فيconsole DevTools في Firefox على النحو التالي:

أدوات مطوري البرامج في Firefox مع رسالة فك تشفير

للتحقّق مما إذا كانت هذه هي المشكلة في Chrome، اتّبِع الخطوات التالية:

  1. انتقِل إلى about://gcm-internals وانقر على زر "بدء التسجيل".

سجلّ وظائف GCM الداخلية في Chrome

  1. شغِّل رسالة فورية، وابحث ضمن "سجلّ أخطاء فك تشفير الرسائل".

سجلّ فك تشفير الوظائف الداخلية لخدمة GCM

في حال حدوث مشكلة في فك تشفير الحمولة، سيظهر لك خطأ يشبه الخطأ المعروض أعلاه. (لاحظ الرسالة AES-GCM decryption failed في عمود التفاصيل).

هناك بعض الأدوات التي قد تساعد في تصحيح أخطاء التشفير إذا كانت المشكلة هي:

مشكلة في الاتصال

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

في Chrome، يمكنك التحقّق مما إذا كان المتصفّح يتلقّى الرسائل من خلال فحص "سجلّ تلقّي الرسائل" في about://gcm-internals.

تتلقى العناصر الداخلية في GCM سجل الرسائل.

إذا لم تصلك الرسالة في الوقت المناسب، تأكَّد من أنّ حالة اتصال المتصفّح هي CONNECTED:

حالة الاتصال في الوظائف الداخلية لخدمة GCM

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

الإبلاغ عن الأخطاء

إذا لم يساعد أي مما سبق في حل المشكلة، ولم تكن هناك أي إشارة إلى سبب المشكلة، يُرجى طرح مشكلة في المتصفح الذي تواجه مشكلة فيه:

بالنسبة إلى Chrome، يمكنك إبلاغنا بالمشكلة على الرابط التالي: https://bugs.chromium.org/p/chromium/issues/list بالنسبة إلى Firefox، عليك إبلاغنا بالمشكلة على الرابط التالي: https://bugzilla.mozilla.org/

لتقديم تقرير جيد عن الخطأ، يجب تقديم التفاصيل التالية:

  • المتصفحات التي تم اختبارها (مثل الإصدار 50 من Chrome والإصدار 51 من Chrome والإصدار 50 من Firefox والإصدار 51 من Firefox)
  • مثال PushSubscription يوضح المشكلة.
  • يمكنك تضمين أي أمثلة على الطلبات (مثل محتوى طلبات الشبكة إلى خدمة إرسال البيانات، بما في ذلك العناوين).
  • أدرِج أيضًا أي أمثلة على الردود الواردة من طلبات الشبكة.

إذا كان بإمكانك تقديم مثال قابل للتكرار، سواء كان رمزًا مصدريًا أو موقعًا إلكترونيًا مستضافًا، غالبًا ما يؤدي ذلك إلى تسريع عملية تشخيص المشكلة وحلّها.

الخطوات التالية

الدروس التطبيقية حول الترميز