عندما تواجه مشكلة في إرسال عبر الويب، قد يكون من الصعب تصحيح المشكلة أو الحصول على المساعدة. يوضّح هذا المستند بعض المشاكل الشائعة والإجراءات التي يجب اتّخاذها في حال رصد خطأ في Chrome أو Firefox.
قبل أن نتعمّق في تصحيح أخطاء عملية الدفع، قد تواجه مشاكل في تصحيح أخطاء عمال الخدمة أنفسهم، أو عدم تعديل الملف، أو تعذُّر التسجيل، أو سلوك غير معتاد بشكل عام. هناك مستند رائع حول تصحيح أخطاء مهام الخدمة ننصحك بشدة بالاطّلاع عليه إذا كنت مبتدئًا في تطوير مهام الخدمة.
هناك مرحلتان مختلفتان يجب التحقّق منهما عند تطوير إشعارات الدفع على الويب واختبارها، لكل منهما مجموعة من المشاكل الشائعة:
- إرسال رسالة: تأكَّد من إرسال الرسائل بنجاح.
من المفترض أن يظهر لك رمز HTTP 201. إذا لم تكن :
- التحقق من أخطاء التفويض: إذا تلقيت رسالة خطأ بشأن التفويض، راجِع قسم مشاكل التفويض.
- أخطاء أخرى في واجهة برمجة التطبيقات: إذا تلقّيت استجابة برمز حالة غير 201، راجِع قسم رموز حالة HTTP للحصول على إرشادات حول سبب المشكلة.
- تلقّي رسالة: إذا كان بإمكانك إرسال رسالة بنجاح،
ولكن لم يتم استلام الرسالة على المتصفّح:
- التحقّق من مشاكل التشفير: راجِع قسم "مشكلة تشفير الحمولة" .
- التحقّق من مشاكل الاتصال: إذا كانت المشكلة في Chrome، قد يكون سببها مشكلة في الاتصال. يمكنك الاطّلاع على قسم "مشاكل الاتصال" لمزيد من المعلومات.
إذا لم تكن قادرًا على إرسال رسالة فورية واستقبالها ولم تكن الأقسام ذات الصلة في هذا المستند تساعد في تصحيح المشكلة، فربما تكون وجدت خطأ في آلية الدفع نفسها. في هذه الحالة، يمكنك الرجوع إلى قسم عرض تقارير الأخطاء لتقديم تقرير خطأ جيد يحتوي على جميع المعلومات اللازمة لتسريع عملية إصلاح الأخطاء.
قبل البدء، أودّ الإشارة إلى أنّ 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 على النحو التالي:
للتحقّق مما إذا كانت هذه هي المشكلة في 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
- التعامل مع الأحداث الفورية
- عرض إشعار
- سلوك الإشعار
- نماذج الإشعارات الشائعة
- الأسئلة الشائعة حول الإشعارات الفورية
- المشاكل الشائعة والإبلاغ عن الأخطاء