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

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

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

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

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

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

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

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

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

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

على Chrome و"المراسلة عبر السحابة الإلكترونية من Firebase"

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

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

  • في حال تعذّر تعريف عنوان Authorization في الطلب المُرسَل إلى "المراسلة عبر السحابة الإلكترونية من Firebase".
  • مفتاح التطبيق المُستخدَم للاشتراك لا يتطابق مع المفتاح المستخدَم لتوقيع عنوان التفويض.
  • تاريخ انتهاء الصلاحية غير صالح في JWT، أي لأنّ تاريخ انتهاء الصلاحية يتجاوز 24 ساعة أو قد انتهت صلاحيته.
  • 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 غير موجود في هذه الحالة، يجب حذف اشتراك Push Subscription من موقعك الإلكتروني وانتظار فرصة لإعادة اشتراك المستخدم.
410 ذهبت. لم يعُد الاشتراك صالحًا ويجب إزالته من موقعك الإلكتروني. يمكن إعادة إنتاجه عن طريق استدعاء `unsubscribe()` على `PushSUBSCRIPTION`.
413 حجم الحمولة كبير جدًا. الحد الأدنى لحجم حمولة البيانات التي يجب أن تدعمها خدمة الدفع هو 4096 بايت (أو 4 كيلوبايت). ويمكن أن يؤدي أيّ حجم أكبر من ذلك إلى حدوث هذا الخطأ.

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

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

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

في هذه الحالة، من المفترض أن تظهر رسالة خطأ في وحدة تحكم "أدوات مطوري البرامج" في Firefox، كما يلي:

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

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

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

سجلّ Chrome GCM الداخلي

  1. شغِّل رسالة فورية، وانظر ضمن "سجلّ تعذُّر فك تشفير الرسائل".

سجلّ فك تشفير الشبكات الداخلية في GCM.

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

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

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

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

في Chrome، يمكنك التحقق مما إذا كان المتصفِّح يتلقى الرسائل من خلال فحص "سجلّ تلقّي الرسائل" (sic) في 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 يوضّح المشكلة.
  • ضمِّن أي أمثلة على الطلبات (أي محتوى طلبات الشبكة لخدمة الدفع، بما في ذلك العناوين).
  • قم أيضًا بتضمين أي أمثلة للردود من طلبات الشبكة.

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

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

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