คำถามที่พบบ่อย
เกี่ยวกับ การอธิบาย User Unique Identifier
- ระหว่างการเริ่มต้นต้องกรอกสตริงเฉพาะ เพื่อสร้าง UID ที่ไม่ซ้ำ UID นี้ทำหน้าที่เป็นรหัสประจำตัวสำหรับการแจ้งเตือนแบบ Push และไม่เกี่ยวข้องกับอุปกรณ์
- เมื่อผู้ใช้ใช้
user_str
เดียวกัน ก็จะถูกระบุว่าเป็นผู้ใช้คนเดียวกัน การสมัครรับบนเบราว์เซอร์หรืออุปกรณ์ต่าง ๆ จะเปลี่ยนข้อมูลการสมัครรับเป็นข้อมูลล่าสุดสำหรับส่งข้อความ ตัวอย่างเช่น ผู้ใช้ A สมัครรับด้วยuser_str
เดียวกัน บนเบราว์เซอร์ a1, a2, a3 ตามลำดับ ในทางทฤษฎี จะมีเฉพาะ a3 ล่าสุดเท่านั้นที่รับข้อความได้ เพื่อป้องกันไม่ให้ผู้ใช้คนเดิมได้รับข้อความหลายครั้งและป้องกันการส่งข้อความมากเกินไป ระบบ backend จะเก็บข้อมูลการสมัครรับล่าสุดสำหรับ UID เดียวเสมอ - การสมัครรับข้อความสามารถยกเลิกได้ และ SDK มี interface สำหรับยกเลิกการสมัคร Interface นี้จะยกเลิกแค่การเชื่อมโยงระหว่าง UID กับข้อมูลการสมัครรับ และจะไม่เปลี่ยนแปลงสิทธิ์การแจ้งเตือนของเบราว์เซอร์
- ในทางทฤษฎี
user_str
ควรแมปแบบหนึ่งต่อหนึ่งกับผู้ใช้จริง ในบางกรณี เช่น โหมดผู้เยี่ยมชม (visitor mode) นักพัฒนาจำเป็นต้องสร้างuser_str
ที่เฉพาะเจาะจงโดยขึ้นอยู่กับสถานการณ์จริง SDK จะไม่สร้างค่าเริ่มต้นให้โดยอัตโนมัติเพื่อหลีกเลี่ยงความผิดพลาดหากนักพัฒนาไม่จัดการความสัมพันธ์ระหว่างuser_str
กับผู้ใช้จริงอย่างถูกต้อง ซึ่งอาจนำไปสู่ข้อมูลสถิติไม่ตรงตามที่คาดหวัง
เมื่อผู้ใช้เข้าสู่โหมด visitor นักพัฒนาสามารถอ้างอิงฟังก์ชันต่อไปนี้เพื่อสร้าง
user_str
ที่ไม่ซ้ำโดยใช้เบราว์เซอร์เป็นตัวระบุ โปรดทราบว่าวิธีนี้จะทำให้ผู้ใช้คนเดียวกันสร้างuser_str
ใหม่เมื่อเปลี่ยนเบราว์เซอร์ อุปกรณ์ หรือเคลียร์แคช
function randomUid() {
const keyStr = 'mtWebPushRandomUid';
let uid = window.localStorage.getItem(keyStr);
if (!uid) {
uid = new Date().getTime().toString(36) + Math.floor(Math.random() * 10000000).toString(36);
window.localStorage.setItem(keyStr, uid);
}
return uid;
}
var user_str = randomUid();
แพลตฟอร์มใดบ้างที่รองรับ WebPush?
การรองรับเบราว์เซอร์ตามระบบปฏิบัติการ
Browser | Windows PC | macOS | Android | iOS (iPhone, iPad) |
---|---|---|---|---|
Chrome | Yes | Yes | Yes | No |
Firefox | Yes | Yes | Yes | No |
Safari | No | Yes | No | Yes |
Microsoft Edge | Yes | Yes | No | No |
Opera | Yes | Yes | Yes | No |
หมายเหตุ 1: Microsoft Edge (อัปเดตในปี 2019), Opera, Samsung Internet, Yandex และ UC Browser พัฒนาบน Chromium และจะถูกแสดงเป็น Chrome ภายใน Engagelab หมายเหตุ 2: Internet Explorer ไม่มีการอัปเดตฟีเจอร์แล้ว Microsoft จึงย้ายการพัฒนาไปที่ Edge หมายเหตุ 3: โหมด ไม่ระบุตัวตน (Incognito), private browsing หรือ guest mode ไม่รองรับ Web Push
รองรับตามเวอร์ชันเบราว์เซอร์
Browser | Windows | macOS | Android |
---|---|---|---|
Chrome | Chrome 42+ | Chrome 42+ | Chrome 105+ |
Firefox | Firefox v44+ | Firefox v44+ | Firefox v104+ |
Safari | / | Safari v11.1+ | / |
Opera | Opera v29+ | Opera v29+ | Opera mobile v64+ |
Microsoft Edge | Edge v17+ | Edge v17+ | / |
คำถามที่พบบ่อยเกี่ยวกับ Safari Web Push
Web Push บน Safari รองรับฟีเจอร์ใดบ้าง?
Feature | macOS (<16) | macOS (16+) | iOS/iPadOS 16.4+ |
---|---|---|---|
Images | No | No | No |
Action Buttons | No | No | No |
Launch URL | Yes | Yes | Yes |
Custom Site Icon | Yes | No | Yes |
ผู้ใช้ iOS/iPadOS จะรับ Safari Web Push ได้อย่างไร?
1. นักพัฒนาต้องตั้งค่า manifest และเพิ่ม attribute ที่ถูกต้องใน html:
<link rel="manifest" href="manifest.json"/>
ไฟล์ manifest ตัวอย่าง:
{
"$schema": "https://json.schemastore.org/web-manifest-combined.json",
"display": "standalone",
"start_url": "/webpush/index.html",
"name": "Engagelab WebPush Example",
"short_name": "Engagelab",
"icons": [
{
"src": "/icon-large-cb438cac.png",
"type": "image/png",
"sizes": "1024x1024"
}
]
}
2. ผู้ใช้ต้อง “เพิ่มลงหน้าจอโฮม” (Add to Home Screen):
- เยี่ยมชมเว็บไซต์บน Safari บน iOS/iPadOS 16.4+
- แตะปุ่มแชร์ → “Add to Home Screen”
- บันทึกแอปลงหน้าจอ → เปิดจากหน้าจอโฮม → สมัครรับการแจ้งเตือน
ควรแสดง banner เพื่อแนะนำผู้ใช้ให้ทำตามขั้นตอนข้างต้น แนะนำใช้งานโครงการ open-source ข้างล่างนี้:
https://github.com/rajatsehgal/add-to-home-screen
ถ้าเบราว์เซอร์ปิดอยู่ ผู้ใช้จะยังได้รับการแจ้งเตือนไหม?
หากใช้ช่องทาง Engagelab: ต้องเปิดเว็บไซต์
หากใช้ช่องทาง system:
- Chrome/Firefox/Opera/Edge (Windows/macOS): แม้ปิดหน้าต่าง แต่หาก process ยังรันใน background ก็จะได้รับ
- Safari บน macOS: แม้ปิด browser ก็สามารถรับได้
- Safari บน Windows: ไม่รองรับ
คำถามเกี่ยวกับ Notification Authorization Prompt
เมื่อผู้ใช้คลิก “Block” หรือ “ไม่อนุญาต” แล้วจะมีอีกครั้งเมื่อไหร่?
- หากผู้ใช้เลือก “Block”/“Don’t Allow”/“Never Allow” จะไม่มี native prompt อีกจนกว่าจะแก้ใน settings
- Chrome: มีโอกาส 3 ครั้ง หลังปิดครั้งที่ 3 จะล็อกทั้งสัปดาห์
- Firefox: หลัง versión 70 ปิด native prompt ต้องคลิกลูกศร icon บน address bar, v72+ จะบล็อก auto
- Safari: มี UI แบบ Quiet เมื่อปฏิเสธบ่อย
วิธีใช้งาน EngageLab Soft Prompt:
- เมื่อผู้ใช้คลิก “Allow” บน Soft Prompt → เปิด native prompt
- หากคลิก Cancel บน native prompt → Soft Prompt จะเด้งอีกครั้งครั้งถัดไป
- หาก user กด Deny บน native prompt → จะไม่สามารถขออีก
- ถ้ากด Cancel บน Soft Prompt → ระบบจะตั้งค่าไม่ขอ native prompt ตอนนั้น หากผู้ใช้กลับมาอีกครั้ง Soft Prompt จะถามอีกครั้ง
วิธีแก้ปัญหาหากไม่รับการแจ้งเตือน
ตรวจสอบ permission บนหน้า notification bar
เช็ค Settings ของระบบปฏิบัติการ:
- Windows: ปิด Focus Assist, เปิด Notifications ตั้งค่าที่ Settings > Notifications & actions
- macOS: Settings > Notifications > เลือก browser แล้วเปิด Allow Notifications และตรวจสอบ Do Not Disturb mode
เปลี่ยนไปใช้ช่องทาง Engagelab หากเบราว์เซอร์ไม่เสถียร
ไม่สามารถ pop up บน Safari ได้?
- ตรวจสอบใน Safari Preferences > Websites > Notification
- ตรวจสอบ Push service status และ permission
- หากโดเมนที่มีหลายหน้า HTML ห้ามลบ permission เดิม ต้องให้สมัครใหม่หลังการลบ
หากผู้ใช้เดียวกันใช้หลายเบราว์เซอร์ ข้อความจะแสดงบนอุปกรณ์ใด?
- หากใช้ system channel: ส่งผ่าน browser ล่าสุดที่ใช้งาน
- หากเลือก Jiguang channel: จะส่งข้อความหลายครั้งในหลายเบราว์เซอร์
หากผู้ใช้ล้าง cache/cookies จะยังได้รับ WebPush ไหม?
- ช่องทาง Jiguang: ยังรับได้
- ช่องทาง browser: หลังล้าง IndexedDB ข้อมูลการสมัครรับจะหาย permission ยังอยู่แต่ต้อง init SDK ใหม่เพื่อสมัครซ้ำ
- หาก user ตั้ง permission เป็น Ask หรือ Block → ไม่สามารถสมัครอัตโนมัติได้
- หากลบใน Settings > Notifications → ไม่สามารถสมัครอัตโนมัติ
- เมื่อรีสมัครจะได้ registration ID ใหม่ ใช้
window.MTpushInterface.getRegistrationID()
หากส่งข้อความหลายข้อความพร้อมกัน ภาษาแสดงแบบใด?
- EngageLab channel: ไม่มี overwrite → จะแสดงหลายข้อความ แต่รวมเป็นกลุ่ม
- Safari: ไม่มี overwrite → แสดงหลายข้อความรวมกลุ่ม
- Chrome/Edge/Firefox: มี overwrite → จะแสดงแค่ข้อความล่าสุดทับข้อความก่อนหน้า
EngageLab WebPush รองรับการเปลี่ยน domain ไหม?
เบราว์เซอร์ผูก subscriber กับ origin (domain) เนื่องจาก same-origin policy
ไม่สามารถย้าย subscriber ได้โดยตรง
หากเปลี่ยน domain:
- สร้าง WebPush app ใหม่
- ส่ง push จากแอปเก่าโดยใช้ launch URL ไปยัง domain ใหม่
- หลัง 2 สัปดาห์–2 เดือน ให้หยุดใช้งานแอปเก่า
- ส่งข้อความแจ้งย้าย domain พร้อมแนะนำให้สมัครใหม่
- เตรียมรับเสีย subscriber ระยะสั้น
EngageLab WebPush รองรับ PWA Push หรือไม่?
1. PWA คืออะไร?
- แอปที่ใช้ web tech และสามารถใช้งานเหมือน native app ผ่าน browser
- PWA push จะใช้งาน Web Push เพื่อแจ้งเตือน ถึงแม้แอปจะไม่ทำงานอยู่
2. รองรับ PWA หรือไม่?
- รองรับ
- นักพัฒนาต้อง integrate Web SDK ตามเอกสาร เพื่อ register Service Worker และ init Web Push
หมายเหตุ: ต้อง
- รันบน browser ที่รองรับ W3C notifications
- ใช้ domain และ HTTPS
3. Service Worker ของ PWA และ EngageLab WebPush จะ conflict กันไหม?
อาจเกิด conflict เนื่องจาก service worker ตัวเดียวควบคุม scope หนึ่ง
หากลง SW สองตัวใน scope เดียวกัน จะอาจเกิดการแทนที่ หรือทำงานพลาด
วิธีหลีกเลี่ยง:
- รวมฟีเจอร์ทั้งหมดไว้ใน SW ตัวเดียว
- หรือแยก scope อย่าให้ overlap
ทำไมเบราว์เซอร์ต่างกัน แต่ได้ regid เหมือนกัน?
ตอบ: ถ้า domain ที่ integrate ตั้งชื่อแอปเดียวกัน และ userStr เหมือนกัน ก็จะได้ rid เดียวกัน ไม่ขึ้นกับเบราว์เซอร์
// Register event listeners before initialization
// Callback when the JPush channel disconnects
MTpushInterface.mtPush.onDisconnect(function () {
console.log("onDisconnect");
});
// Receive push messages (web push, browser vendor channel)
MTpushInterface.onMsgReceive((msgData) => {
// msgData structure {data:{xxx}, type:0}
// type:0 is JPush channel, type:1 is system channel
console.log("Received push message:", msgData);
});
// Push initialization
MTpushInterface.init({
appkey: "", // Required, see application information above
user_str: visitorId, // Required, user identifier
fail(err) {
console.log("Online push creation failed", err);
},
success(data) {
console.log("Online push created successfully", data);
},
webPushcallback(code, tip) {
console.log("User received status code and tip", code, tip);
},
swUrl: '', // Default: "/sw.min." + sdkEnv.version + ".js"
canGetInfo(data) {
// Notification configuration data available here
// RegId available after this callback
console.log(data); // Configuration information
console.log("Received RegId", MTpushInterface.getRegistrationID());
},
custom: (fuc) => {
// When using custom notification config:
// 1. Manually call fuc() to request permission
// 2. Only obtainable through custom callback
// 3. fuc() requests notification permissions
}
});
หากพบปัญหาที่ไม่ได้อยู่ในเอกสารนี้ สามารถติดต่อ customer service ได้เสมอที่
https://www.engagelab.com/contact