ปัญหาที่พบบ่อยและการรายงานข้อบกพร่อง

เมื่อคุณพบปัญหาเว็บพุช การแก้ไขข้อบกพร่องอาจทำได้ยากหรือ ค้นหาความช่วยเหลือ เอกสารนี้จะสรุปปัญหาที่พบได้ทั่วไปบางส่วนและสิ่งที่คุณควร หากพบข้อบกพร่องใน Chrome หรือ Firefox

ก่อนที่เราจะเจาะลึกเกี่ยวกับการแก้ไขข้อบกพร่องเกี่ยวกับการพุช คุณอาจพบปัญหากับการแก้ไขข้อบกพร่อง Service Worker ด้วยตนเอง ไฟล์ไม่อัปเดต ลงทะเบียนไม่สำเร็จ หรือ เป็นแค่พฤติกรรมที่ผิดปกติ มี เอกสารที่ยอดเยี่ยมเกี่ยวกับการแก้ไขข้อบกพร่องของ Service Worker ซึ่งเราขอแนะนำเป็นอย่างยิ่งให้ตรวจสอบหากคุณเพิ่งเริ่มใช้ เพื่อพัฒนาโปรแกรมทำงานของบริการ

มี 2 ขั้นตอนที่แตกต่างกันให้ตรวจสอบเมื่อพัฒนาและทดสอบการพุชจากเว็บ แต่ละฝ่ายมีชุดปัญหาทั่วไปของตนเอง

  • การส่งข้อความ: ตรวจสอบว่าส่งข้อความได้สำเร็จ คุณควรได้รับรหัส HTTP 201 หากคุณไม่ใช่ :
  • การรับข้อความ: หากคุณส่งข้อความได้สำเร็จ แต่ไม่ได้รับข้อความในเบราว์เซอร์:

หากคุณไม่สามารถส่งและรับข้อความพุชและส่วนที่เกี่ยวข้อง ในเอกสารนี้ไม่ได้ช่วยวินิจฉัยปัญหา ดังนั้นคุณอาจพบ ในตัวกลไกการพุช ในกรณีนี้ โปรดดู การแสดงรายงานข้อบกพร่อง เพื่อส่งรายงานข้อบกพร่องที่ดีพร้อมด้วยข้อมูลที่จำเป็นทั้งหมดเพื่อเร่งดำเนินการ ขั้นตอนการแก้ไขข้อบกพร่อง

สิ่งหนึ่งที่ผมอยากจะบอกคุณก่อนที่จะเริ่มก็คือ Firefox และ Mozilla AutoPush Service มีข้อความแสดงข้อผิดพลาดที่ยอดเยี่ยม หากติดขัดและ หากไม่แน่ใจว่าปัญหาคืออะไร ให้ทดสอบใน Firefox และดูว่า ได้รับข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์มากขึ้น

ปัญหาเกี่ยวกับการให้สิทธิ์

ปัญหาการให้สิทธิ์เป็นปัญหาหนึ่งที่นักพัฒนาซอฟต์แวร์พบบ่อยที่สุดเมื่อ เริ่มจากข้อความ Push จากเว็บ ปกติแล้วปัญหานี้จะเกิดจากการกำหนดค่าแท็ก คีย์แอปพลิเคชันเซิร์ฟเวอร์ (หรือที่รู้จักในชื่อคีย์ VAPID)

วิธีที่ง่ายที่สุดในการสนับสนุนการพุชทั้งใน Firefox และ Chrome คือการจัดหา applicationServerKey ในการโทร subscribe() ข้อเสียก็คือ ความคลาดเคลื่อนใดๆ ระหว่างคีย์ของส่วนหน้าและคีย์ของเซิร์ฟเวอร์จะทำให้เกิด ข้อผิดพลาดในการให้สิทธิ์

ใน Chrome และ FCM

สำหรับ Chrome ซึ่งใช้ FCM เป็นบริการพุช คุณจะได้รับ การตอบกลับ UnauthorizedRegistration รายการจาก FCM สำหรับช่วงที่แตกต่างกัน ซึ่งทั้งหมดนี้เกี่ยวข้องกับคีย์แอปพลิเคชันเซิร์ฟเวอร์

คุณจะได้รับข้อผิดพลาด UnauthorizedRegistration ในข้อใดข้อหนึ่งต่อไปนี้ สถานการณ์:

  • หากคุณกำหนดส่วนหัว Authorization ในคำขอไปยัง FCM ไม่สำเร็จ
  • คีย์แอปพลิเคชันที่ใช้สมัครผู้ใช้ไม่ตรงกับคีย์ที่ใช้ เพื่อลงชื่อในส่วนหัวการให้สิทธิ์
  • วันหมดอายุไม่ถูกต้องใน 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 พุชอัตโนมัติ:

{
  "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 KB) ขนาดที่ใหญ่ขึ้นอาจทำให้เกิดข้อผิดพลาดนี้ได้

หากรหัสสถานะ HTTP ไม่อยู่ในรายการนี้และข้อความแสดงข้อผิดพลาดไม่แสดง มีประโยชน์ ให้ตรวจสอบโปรโตคอลการพุชจากเว็บ พิเศษ เพื่อดูว่า มีการอ้างอิงรหัสสถานะพร้อมกับสถานการณ์ที่รหัสสถานะนั้นสามารถ

ปัญหาเกี่ยวกับการเข้ารหัสเพย์โหลด

หากทริกเกอร์ข้อความพุชสำเร็จ (เช่น ส่งข้อความไปยังเว็บ) และรับโค้ดตอบกลับ 201) แต่เหตุการณ์พุชไม่เคยเริ่มทำงานใน โปรแกรมทำงานของบริการ ซึ่งปกติแล้วจะบ่งบอกว่าเบราว์เซอร์ล้มเหลวในการ ถอดรหัสข้อความที่ได้รับ

ในกรณีนี้ คุณควรเห็นข้อความแสดงข้อผิดพลาดในเครื่องมือสำหรับนักพัฒนาเว็บของ Firefox คอนโซลในลักษณะนี้

เครื่องมือสำหรับนักพัฒนาเว็บใน Firefox ที่มีข้อความถอดรหัส

หากต้องการตรวจสอบว่าเป็นปัญหาใน Chrome หรือไม่ ให้ทำดังนี้

  1. ไปที่ about://gcm-internals แล้วคลิก "เริ่มการบันทึก"

ระเบียน GCM ภายในของ Chrome

  1. เรียกข้อความพุช และดูในส่วน "บันทึกการถอดรหัสข้อความล้มเหลว"

บันทึกการถอดรหัสภายใน GCM

หากมีปัญหาเกี่ยวกับการถอดรหัสเพย์โหลด คุณจะเห็นข้อผิดพลาด คล้ายกับที่แสดงอยู่ด้านบน (ให้สังเกตที่ AES-GCM decryption failed ในคอลัมน์รายละเอียด)

มีเครื่องมือบางอย่างที่อาจช่วยแก้ปัญหาการเข้ารหัสได้หากเป็นปัญหาของคุณ

ปัญหาเกี่ยวกับการเชื่อมต่อ

หากคุณไม่ได้รับเหตุการณ์ Push ใน Service Worker และคุณไม่ได้รับ เห็นข้อผิดพลาดในการถอดรหัส เบราว์เซอร์อาจไม่สามารถเชื่อมต่อกับ ด้วยบริการพุช

ใน Chrome คุณสามารถตรวจสอบว่าเบราว์เซอร์ได้รับข้อความหรือไม่ โดยตรวจสอบ ลิงก์ "รับข้อความบันทึก" (sic) ใน about://gcm-internals

ผู้ใช้ภายใน GCM จะได้รับบันทึกข้อความ

หากคุณไม่เห็นข้อความว่ามาถึงภายในเวลาที่กำหนด ให้ตรวจสอบว่า สถานะการเชื่อมต่อของเบราว์เซอร์ของคุณคือ CONNECTED

สถานะการเชื่อมต่อภายใน GCM

หากไม่ได้ "เชื่อมต่อ" คุณอาจต้องลบโปรไฟล์ปัจจุบันและ ให้สร้างบัญชีใหม่ หากเป็นเช่นนั้น ยังไม่สามารถแก้ไขปัญหาได้ โปรดส่งรายงานข้อบกพร่องตามที่แนะนำด้านล่างนี้

กำลังสร้างรายงานข้อบกพร่อง

หากวิธีการต่างๆ ข้างต้นไม่ช่วยแก้ปัญหาของคุณ และไม่มีสัญญาณของสิ่งที่ อาจเกิดปัญหากับเบราว์เซอร์ที่คุณใช้ ปัญหาเกี่ยวกับ:

สำหรับ Chrome คุณควรแจ้งปัญหาที่นี่ https://bugs.chromium.org/p/chromium/issues/list สำหรับ Firefox คุณควรแจ้งปัญหาดังนี้ https://bugzilla.mozilla.org/

หากต้องการรายงานข้อบกพร่องที่ดี คุณควรให้รายละเอียดต่อไปนี้

  • เบราว์เซอร์ที่คุณใช้ทดสอบ (เช่น Chrome เวอร์ชัน 50, Chrome เวอร์ชัน 51, Firefox รุ่น 50, Firefox รุ่น 51)
  • ตัวอย่าง PushSubscription ที่แสดงให้เห็นปัญหา
  • รวมคำขอตัวอย่างทั้งหมด (เช่น เนื้อหาของคำขอเครือข่ายที่ส่งไปยังพุช บริการ รวมถึงส่วนหัว)
  • ระบุการตอบกลับจากคำขอของเครือข่ายด้วย

หากคุณสามารถให้ตัวอย่างที่ทำซ้ำได้ ไม่ว่าจะเป็นซอร์สโค้ดหรือเว็บที่โฮสต์ ก็จะช่วยให้ระบบวิเคราะห์และแก้ปัญหาได้เร็วขึ้น

สถานที่ที่จะไปต่อ

Code Lab