พุชการแจ้งเตือน
ส่งมอบคำตอบของเจ้าหน้าที่และแคมเปญขณะที่แอปปิดอยู่ พร้อม deep link ตรงเข้าสู่บทสนทนาที่ถูกต้อง แอปของคุณเป็นเจ้าของระบบพุช; ส่วน SDK ลงทะเบียน token และเปิดบทสนทนา
Respondo ส่งอะไร#
- พุชข้อความ — คำตอบของเจ้าหน้าที่หรือ AI ในบทสนทนาที่ผู้เข้าชมเป็นส่วนหนึ่งอยู่
- พุชแคมเปญ — แคมเปญพุชขาออก ซึ่งยังรายงาน beacon การเปิดด้วย
พุชข้อความมี deep link ในรูปแบบ respondo://conversation/<id> เสมอ ส่วนพุชแคมเปญมี deep link ที่กำหนดค่าไว้บนแคมเปญ — มันเป็นทางเลือก และเมื่อไม่ได้ตั้งค่า พุชจะไม่มี deep link
Apple (APNs)#
พุชบน iOS ทำงานบน APNs โดยตรง — ไม่มี dependency กับ Firebase จากบัญชี Apple Developer ของคุณ ให้ขอสิ่งเหล่านี้:
- APNs Auth Key (token key แบบ
.p8) - Key ID ของ key นั้น
- Team ID ของคุณ
- bundle id ของแอป
Google (FCM)#
พุชบน Android ไปผ่าน Firebase Cloud Messaging จากโปรเจกต์ Firebase ของคุณ ให้ขอสิ่งเหล่านี้:
- service account JSON ที่มี role Cloud Messaging
- Firebase project ID (คอนโซล Firebase → Project settings) — กรอกเป็นฟิลด์ของตัวเองในฟอร์มพุชของแดชบอร์ดควบคู่กับ service-account JSON
- package name ของแอป Android และเชื่อมต่อแอปเข้ากับโปรเจกต์ Firebase เดียวกัน (
google-services.json)
การตั้งค่าใน Respondo#
เพิ่ม APNs key และ FCM service account พร้อม project ID ของมันเข้ากับช่องวิดเจ็ตของคุณในแดชบอร์ด เพียงเท่านี้ Respondo ก็ต้องการทั้งหมดที่จำเป็นเพื่อส่งไปยังทั้งสองแพลตฟอร์ม
รูปแบบ payload#
payload อยู่ใต้ key ราก respondo เสมอ — การมีอยู่ของมันคือวิธีที่ SDK แยกแยะพุชของตนเองออกจากพุชอื่น (บน iOS อยู่ใน userInfo, บน Android เป็นสตริง JSON ใน data["respondo"])
{
"respondo": {
"type": "message",
"conversation_id": "a1c4e7b2-5d38-4f6a-9e10-3b7c2d5f8a90",
"message_id": "e9a3c1f6-4b8d-4e0a-b5f3-1d7b2a4e9c63",
"deep_link": "respondo://conversation/a1c4e7b2-5d38-4f6a-9e10-3b7c2d5f8a90"
}
}ค่าทั้งหมดเป็นสตริงแบบแบน ชื่อและเนื้อหาของการแจ้งเตือนถูกส่งมอบโดย transport ของแพลตฟอร์ม — aps.alert บน APNs และ message.notification บน FCM — ไม่ได้อยู่ในออบเจ็กต์ respondo
พุชแคมเปญยังมี delivery_id ที่ใช้รายงาน beacon การเปิดด้วย และอาจมี key สตริงแบบแบนเพิ่มเติมจากข้อมูลพุชของแคมเปญ
การจัดการการแตะและ foreground#
เมื่อแตะการแจ้งเตือน ให้ส่ง payload ดิบให้ SDK มันจะแยกวิเคราะห์ payload และเปิดบทสนทนาที่ถูกต้อง โดยคืน false หากพุชนั้นไม่ใช่พุชของ Respondo (ในกรณีนั้นให้คุณจัดการเอง)
Android: RespondoPushPayload.from(data)?.let { Respondo.handlePush(it) }
iOS: Respondo.handlePush(userInfo: userInfo)
Flutter: Respondo.handlePushData(message.data)รายการซ้ำจะถูกยุบรวมด้วย message_id, และขณะที่บทสนทนาเดียวกันเปิดอยู่ที่ foreground การแจ้งเตือนของระบบจะถูกระงับ — SDK จัดการทั้งสองอย่างโดยอัตโนมัติ
การลงทะเบียน device token#
แอปของคุณได้ device token จากระบบพุชของตนและส่งไปยัง setPushToken เรียก clearPushToken เมื่อออกจากระบบ
- Android — FCM registration token จาก
FirebaseMessaging.getToken() - iOS (เนทีฟ) — APNs device token (hex) จาก
didRegisterForRemoteNotificationsWithDeviceToken - iOS ผ่าน Flutter (firebase_messaging) — ใช้
getAPNSToken(), ไม่ใช่getToken()การส่ง FCM token บน iOS จะส่งมันไปที่ APNs ซึ่งมันไม่ใช่ device token ที่ถูกต้อง และพุชจะไม่มีวันมาถึงgetAPNSToken()อาจเป็น null ในช่วงแรกหลังเปิดแอป — หากเป็นเช่นนั้นให้ลองใหม่หลังหน่วงเวลาสั้น ๆ
override fun onNewToken(token: String) {
Respondo.setPushToken(token)
}func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
) {
let token = deviceToken.map { String(format: "%02x", $0) }.joined()
Respondo.setPushToken(token)
}// iOS ต้องใช้ APNs token; Android ต้องใช้ FCM token
final token = Platform.isIOS
? await FirebaseMessaging.instance.getAPNSToken()
: await FirebaseMessaging.instance.getToken();
if (token != null) Respondo.setPushToken(token);
// FCM หมุน registration token ของมัน; ให้ Android sync อยู่เสมอ
if (!Platform.isIOS) {
FirebaseMessaging.instance.onTokenRefresh.listen(Respondo.setPushToken);
}