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

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

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

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

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

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

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

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

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

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

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

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

ستظهر لك رسالة الخطأ "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

يقدم كل من فايرفوكس و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 الدفع التلقائي:

{
  "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) لكن حدث الدفع لا يبدأ أبدًا إلى عامل الخدمة، فهذا يشير عادةً إلى فشل المتصفح فك تشفير الرسالة التي يتلقاها.

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

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

للتحقق مما إذا كانت هذه هي المشكلة في Chrome، قم بما يلي:

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

سجلّ عمليات GCM الداخلية في Chrome

  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 أو Firefox الإصدار 50، الإصدار 51 من Firefox).
  • مثال PushSubscription يوضح المشكلة.
  • ضمِّن أي أمثلة على الطلبات (مثل محتوى طلبات الشبكة إلى الدفعة). الخدمة، بما في ذلك العناوين).
  • ضمِّن أي أمثلة للردود من طلبات الشبكة أيضًا.

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

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

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