عند مواجهة مشكلة في إرسال الإشعارات الفورية على الويب، قد يكون من الصعب تصحيح أخطاء المشكلة أو الحصول على مساعدة. يوضّح هذا المستند بعض المشاكل الشائعة والإجراءات التي يجب اتّخاذها في حال رصد خطأ في Chrome أو Firefox.
قبل أن نتعمّق في تصحيح أخطاء عملية الدفع، قد تواجه مشاكل في تصحيح أخطاء خدمة "العامل في الخدمة" نفسها، أو عدم تعديل الملف، أو تعذُّر التسجيل، أو سلوك غير معتاد بشكل عام. هناك مستند رائع حول تصحيح أخطاء مهام الخدمة ننصحك بشدة بالاطّلاع عليه إذا كنت مبتدئًا في تطوير مهام الخدمة.
هناك مرحلتان مختلفتان يجب التحقّق منهما عند تطوير إشعارات الدفع على الويب واختبارها، لكل منهما مجموعة من المشاكل الشائعة:
- إرسال رسالة: تأكَّد من إرسال الرسائل بنجاح.
من المفترض أن يظهر لك رمز HTTP 201. إذا لم تكن :
- التحقّق من أخطاء التفويض: إذا ظهرت لك رسالة خطأ تتعلّق بالتفويض، يُرجى الاطّلاع على قسم "مشاكل التفويض".
- أخطاء أخرى في واجهة برمجة التطبيقات: إذا تلقّيت استجابة برمز حالة غير 201، راجِع قسم رموز حالة HTTP للحصول على إرشادات حول سبب المشكلة.
- تلقّي رسالة: إذا كان بإمكانك إرسال رسالة بنجاح،
ولكن لم يتم استلام الرسالة على المتصفّح:
- التحقّق من مشاكل التشفير: راجِع قسم "مشكلة تشفير الحمولة".
- التحقّق من مشاكل الاتصال: إذا كانت المشكلة في Chrome، قد يكون سببها مشكلة في الاتصال. يمكنك الاطّلاع على قسم "مشاكل الاتصال" لمزيد من المعلومات.
إذا لم تتمكّن من إرسال رسالة دفع واستلامها ولم تساعدك الأقسام ذات الصلة في هذا المستند في تصحيح أخطاء المشكلة، قد يكون قد حدث خطأ في آلية الإرسال نفسها. في هذه الحالة، يُرجى الرجوع إلى القسم إعداد تقارير الأخطاء لتقديم تقرير أخطاء جيد يتضمّن جميع المعلومات اللازمة لتسريع عملية إصلاح الأخطاء.
قبل البدء، أودّ الإشارة إلى أنّ Firefox و Mozilla AutoPush Service يتضمّنان رسائل خطأ رائعة. إذا واجهت مشكلة ولم تكن متأكّدًا من سببها، يمكنك اختبار الإجراء في Firefox لمعرفة ما إذا كانت ظهرت رسالة خطأ أكثر فائدة.
مشاكل التفويض
إنّ مشاكل التفويض هي من بين المشاكل الأكثر شيوعًا التي يواجهها المطوّرون عند البدء باستخدام إشعارات الدفع على الويب. تحدث هذه المشكلة عادةً بسبب مشكلة في إعداد مفاتيح خادم التطبيقات (المعروفة أيضًا باسم مفاتيح VAPID) للموقع الإلكتروني.
إنّ أسهل طريقة لتفعيل ميزة "الدفع" في كلّ من Firefox وChrome هي توفير applicationServerKey
في طلب subscribe()
. الجانب السلبي هو أنّ
أي تناقض بين مفاتيح الواجهة الأمامية والخادم سيؤدي إلى
خطأ في التفويض.
على Chrome وFCM
بالنسبة إلى Chrome الذي يستخدم خدمة المراسلة عبر السحابة الإلكترونية من Firebase (FCM) كخدمة دفع، ستتلقّى UnauthorizedRegistration
استجابة من FCM لمجموعة من
الأخطاء المختلفة، وكلها تتعلّق بمفاتيح خادم التطبيق.
سيظهر لك خطأ UnauthorizedRegistration
في أيّ من
الحالات التالية:
- إذا تعذّر عليك تحديد عنوان
Authorization
في الطلب المُرسَل إلى خدمة "إشعارات Google من خادم Firebase" - لا يتطابق مفتاح تطبيقك المستخدَم لإشتراك المستخدم مع المفتاح المستخدَم لتوقيع رأس Authorization.
- تاريخ انتهاء الصلاحية غير صالح في رمز 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 | عدد الطلبات كبير جدًا. وصل خادم التطبيقات إلى الحد الأقصى لمعدّل مع خدمة الإرسال الفوري. يجب أن يتضمّن الردّ من الخدمة رأس Retry-After لتحديد المدة التي يمكن خلالها تقديم طلب آخر. |
400 | الطلب غير صالح. أحد العناوين غير صالح أو معدّ بتنسيق غير سليم. |
404 | غير موجودة في هذه الحالة، عليك حذف PushSubscription من الخلفية والانتظار إلى أن تتوفر فرصة لإعادة اشتراك المستخدم. |
410 | تمّت إزالة المحتوى. لم يعُد الاشتراك صالحًا ويجب إزالته من الجانب الخلفي. يمكن إعادة إنتاج هذا الخطأ عن طريق استدعاء unsubscribe() على PushSubscription. |
413 | حجم الحمولة كبير جدًا. الحد الأدنى لحجم الحمولة التي يجب أن تسمح بها خدمة الإرسال الفوري هو 4096 بايت (أو 4 كيلوبايت). ويمكن أن يؤدي أي حجم أكبر إلى ظهور هذا الخطأ. |
إذا لم يكن رمز حالة HTTP مُدرَجًا في هذه القائمة ولم تكن رسالة الخطأ مفيدة، اطّلِع على مواصفات بروتوكول Web Push Protocol لمعرفة ما إذا كان يتم الإشارة إلى رمز الحالة مع سيناريو يوضّح حالات استخدام رمز الحالة هذا.
مشكلة في تشفير الحمولة
إذا كان بإمكانك تنشيط رسالة دفع بنجاح (أي إرسال رسالة إلى خدمة دفع على الويب وتلقّي رمز استجابة 201)، ولكن لم يتم إطلاق حدث الدفع أبدًا في عامل الخدمة، يشير ذلك عادةً إلى أنّ المتصفّح تعذّر عليه فك تشفير الرسالة التي تلقّاها.
في هذه الحالة، من المفترض أن تظهر لك رسالة خطأ فيconsole DevTools في Firefox على النحو التالي:
للتحقّق مما إذا كانت هذه هي المشكلة في Chrome، اتّبِع الخطوات التالية:
- انتقِل إلى about://gcm-internals وانقر على زر "بدء التسجيل".
- شغِّل رسالة فورية، وابحث ضمن "سجلّ أخطاء فك تشفير الرسائل".
في حال حدوث مشكلة في فك تشفير الحمولة، سيظهر لك خطأ
يشبه الخطأ المعروض أعلاه. (لاحظ الرسالة AES-GCM decryption failed
في عمود التفاصيل).
هناك بعض الأدوات التي قد تساعد في تصحيح أخطاء التشفير إذا كانت هذه هي مشكلتك:
- أداة التحقّق من التشفير من خلال الدفع من تأليف "بيتر بيفيرلو"
- Web Push: صفحة اختبار تشفير البيانات من Mozilla
مشكلة في الاتصال
إذا لم تتلقّ حدث دفع في Worker الخدمة ولم يكن هناك أي أخطاء في فك التشفير، قد يتعذّر على المتصفّح الاتصال بخدمة دفع.
في Chrome، يمكنك التحقّق مما إذا كان المتصفّح يتلقّى الرسائل من خلال فحص "سجلّ تلقّي الرسائل" في about://gcm-internals
.
إذا لم تصلك الرسالة في الوقت المناسب، تأكَّد من أنّ
حالة اتصال المتصفّح هي CONNECTED
:
إذا كان غير "مرتبط"، قد تحتاج إلى حذف ملفك التجاري الحالي وإنشاء ملف جديد. إذا استمرت المشكلة، يُرجى إرسال تقرير خطأ كما هو مقترَح أدناه.
الإبلاغ عن الأخطاء
إذا لم تساعدك أي من الخطوات السابقة في حلّ مشكلتك ولم تظهر أي إشارة على سبب هذه المشكلة، يُرجى إبلاغنا بالمشكلة في المتصفّح الذي تواجه فيه مشكلة:
بالنسبة إلى Chrome، يمكنك إبلاغنا بالمشكلة على الرابط التالي: https://bugs.chromium.org/p/chromium/issues/list بالنسبة إلى Firefox، عليك إبلاغنا بالمشكلة على الرابط التالي: https://bugzilla.mozilla.org/
لتقديم تقرير جيد عن الخطأ، يجب تقديم التفاصيل التالية:
- المتصفحات التي تم اختبارها (مثل الإصدار 50 من Chrome والإصدار 51 من Chrome والإصدار 50 من Firefox والإصدار 51 من Firefox)
- مثال
PushSubscription
يوضّح المشكلة - أدرِج أي أمثلة على الطلبات (أي محتوى طلبات الشبكة إلى خدمة إعلام فوري، بما في ذلك العناوين).
- أدرِج أيضًا أي أمثلة على الردود الواردة من طلبات الشبكة.
إذا كان بإمكانك تقديم مثال قابل للتكرار، سواء كان رمز المصدر أو موقع إلكتروني مُستضاف، غالبًا ما يؤدي ذلك إلى تسريع عملية تشخيص المشكلة وحلّها.
الخطوات التالية
- نظرة عامة على الإشعارات الفورية على الويب
- آلية عمل الإشعارات الفورية
- اشتراك مستخدم
- تجربة المستخدم في ما يتعلّق بالأذونات
- إرسال الرسائل باستخدام مكتبات Web Push
- Web Push Protocol
- معالجة أحداث الإشعارات الفورية
- عرض إشعار
- سلوك الإشعار
- نماذج الإشعارات الشائعة
- الأسئلة الشائعة حول الإشعارات الفورية
- المشاكل الشائعة والإبلاغ عن الأخطاء