เมื่อคุณพบปัญหาเว็บพุช การแก้ไขข้อบกพร่องอาจทำได้ยากหรือ ค้นหาความช่วยเหลือ เอกสารนี้จะสรุปปัญหาที่พบได้ทั่วไปบางส่วนและสิ่งที่คุณควร หากพบข้อบกพร่องใน Chrome หรือ Firefox
ก่อนที่เราจะเจาะลึกเกี่ยวกับการแก้ไขข้อบกพร่องเกี่ยวกับการพุช คุณอาจพบปัญหากับการแก้ไขข้อบกพร่อง Service Worker ด้วยตนเอง ไฟล์ไม่อัปเดต ลงทะเบียนไม่สำเร็จ หรือ เป็นแค่พฤติกรรมที่ผิดปกติ มี เอกสารที่ยอดเยี่ยมเกี่ยวกับการแก้ไขข้อบกพร่องของ Service Worker ซึ่งเราขอแนะนำเป็นอย่างยิ่งให้ตรวจสอบหากคุณเพิ่งเริ่มใช้ เพื่อพัฒนาโปรแกรมทำงานของบริการ
มี 2 ขั้นตอนที่แตกต่างกันให้ตรวจสอบเมื่อพัฒนาและทดสอบการพุชจากเว็บ แต่ละฝ่ายมีชุดปัญหาทั่วไปของตนเอง
- การส่งข้อความ: ตรวจสอบว่าส่งข้อความได้สำเร็จ
คุณควรได้รับรหัส HTTP 201 หากคุณไม่ใช่ :
- ตรวจหาข้อผิดพลาดในการให้สิทธิ์: หากคุณได้รับการให้สิทธิ์ โปรดดู ส่วนปัญหาเกี่ยวกับการให้สิทธิ์
- ข้อผิดพลาดอื่นๆ ของ API: หากคุณได้รับการตอบกลับรหัสสถานะที่ไม่ใช่ 201 โปรดดูส่วนรหัสสถานะ HTTP สำหรับ เกี่ยวกับสาเหตุของปัญหา
- การรับข้อความ: หากคุณส่งข้อความได้สำเร็จ
แต่ไม่ได้รับข้อความในเบราว์เซอร์:
- ตรวจสอบปัญหาการเข้ารหัส: ดูการเข้ารหัสเพย์โหลด ส่วนปัญหา
- ตรวจสอบปัญหาการเชื่อมต่อ: หากปัญหาเกิดใน Chrome ระบบจะ อาจเป็นการเชื่อมต่อ ดูส่วนปัญหาเกี่ยวกับการเชื่อมต่อ เพื่อดูข้อมูลเพิ่มเติม
หากคุณไม่สามารถส่งและรับข้อความพุชและส่วนที่เกี่ยวข้อง ในเอกสารนี้ไม่ได้ช่วยวินิจฉัยปัญหา ดังนั้นคุณอาจพบ ในตัวกลไกการพุช ในกรณีนี้ โปรดดู การแสดงรายงานข้อบกพร่อง เพื่อส่งรายงานข้อบกพร่องที่ดีพร้อมด้วยข้อมูลที่จำเป็นทั้งหมดเพื่อเร่งดำเนินการ ขั้นตอนการแก้ไขข้อบกพร่อง
สิ่งหนึ่งที่ผมอยากจะบอกคุณก่อนที่จะเริ่มก็คือ 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 คอนโซลในลักษณะนี้
หากต้องการตรวจสอบว่าเป็นปัญหาใน Chrome หรือไม่ ให้ทำดังนี้
- ไปที่ about://gcm-internals แล้วคลิก "เริ่มการบันทึก"
- เรียกข้อความพุช และดูในส่วน "บันทึกการถอดรหัสข้อความล้มเหลว"
หากมีปัญหาเกี่ยวกับการถอดรหัสเพย์โหลด คุณจะเห็นข้อผิดพลาด
คล้ายกับที่แสดงอยู่ด้านบน (ให้สังเกตที่ AES-GCM decryption failed
ในคอลัมน์รายละเอียด)
มีเครื่องมือบางอย่างที่อาจช่วยแก้ปัญหาการเข้ารหัสได้หากเป็นปัญหาของคุณ
- เครื่องมือ Push Encryption Verifier โดย Peter Beverloo
- พุชจากเว็บ: หน้าทดสอบการเข้ารหัสข้อมูลโดย Mozilla
ปัญหาเกี่ยวกับการเชื่อมต่อ
หากคุณไม่ได้รับเหตุการณ์ Push ใน Service Worker และคุณไม่ได้รับ เห็นข้อผิดพลาดในการถอดรหัส เบราว์เซอร์อาจไม่สามารถเชื่อมต่อกับ ด้วยบริการพุช
ใน Chrome คุณสามารถตรวจสอบว่าเบราว์เซอร์ได้รับข้อความหรือไม่ โดยตรวจสอบ
ลิงก์ "รับข้อความบันทึก" (sic) ใน about://gcm-internals
หากคุณไม่เห็นข้อความว่ามาถึงภายในเวลาที่กำหนด ให้ตรวจสอบว่า
สถานะการเชื่อมต่อของเบราว์เซอร์ของคุณคือ CONNECTED
หากไม่ได้ "เชื่อมต่อ" คุณอาจต้องลบโปรไฟล์ปัจจุบันและ ให้สร้างบัญชีใหม่ หากเป็นเช่นนั้น ยังไม่สามารถแก้ไขปัญหาได้ โปรดส่งรายงานข้อบกพร่องตามที่แนะนำด้านล่างนี้
กำลังสร้างรายงานข้อบกพร่อง
หากวิธีการต่างๆ ข้างต้นไม่ช่วยแก้ปัญหาของคุณ และไม่มีสัญญาณของสิ่งที่ อาจเกิดปัญหากับเบราว์เซอร์ที่คุณใช้ ปัญหาเกี่ยวกับ:
สำหรับ Chrome คุณควรแจ้งปัญหาที่นี่ https://bugs.chromium.org/p/chromium/issues/list สำหรับ Firefox คุณควรแจ้งปัญหาดังนี้ https://bugzilla.mozilla.org/
หากต้องการรายงานข้อบกพร่องที่ดี คุณควรให้รายละเอียดต่อไปนี้
- เบราว์เซอร์ที่คุณใช้ทดสอบ (เช่น Chrome เวอร์ชัน 50, Chrome เวอร์ชัน 51, Firefox รุ่น 50, Firefox รุ่น 51)
- ตัวอย่าง
PushSubscription
ที่แสดงให้เห็นปัญหา - รวมคำขอตัวอย่างทั้งหมด (เช่น เนื้อหาของคำขอเครือข่ายที่ส่งไปยังพุช บริการ รวมถึงส่วนหัว)
- ระบุการตอบกลับจากคำขอของเครือข่ายด้วย
หากคุณสามารถให้ตัวอย่างที่ทำซ้ำได้ ไม่ว่าจะเป็นซอร์สโค้ดหรือเว็บที่โฮสต์ ก็จะช่วยให้ระบบวิเคราะห์และแก้ปัญหาได้เร็วขึ้น
สถานที่ที่จะไปต่อ
- ภาพรวมข้อความ Push จากเว็บ
- วิธีการทำงานของพุช
- การสมัครใช้บริการผู้ใช้
- UX สิทธิ์
- การส่งข้อความด้วยไลบรารีพุชบนเว็บ
- โปรโตคอลการพุชในเว็บ
- การจัดการเหตุการณ์พุช
- การแสดงการแจ้งเตือน
- ลักษณะการทำงานของการแจ้งเตือน
- รูปแบบการแจ้งเตือนทั่วไป
- คำถามที่พบบ่อยเกี่ยวกับข้อความ Push
- ปัญหาที่พบบ่อยและการรายงานข้อบกพร่อง