התראות דחיפה
מסרו תשובות נציגים וקמפיינים בזמן שהאפליקציה סגורה, עם קישור עמוק ישירות אל השיחה הנכונה. האפליקציה שלכם מחזיקה את תת-מערכת הדחיפה; ה-SDK רושם טוקנים ופותח שיחות.
מה Respondo שולח#
- דחיפות הודעה — תשובה של נציג או AI בשיחה שהמבקר משתתף בה.
- דחיפות קמפיין — קמפייני דחיפה יוצאים, שגם מדווחים על beacon פתיחה.
דחיפות הודעה תמיד נושאות קישור עמוק בצורה respondo://conversation/<id>. דחיפות קמפיין נושאות את הקישור העמוק שהוגדר בקמפיין — הוא אופציונלי, וכשאינו מוגדר הדחיפה אינה מכילה קישור עמוק.
Apple (APNs)#
דחיפה ב-iOS רצה על APNs ישירות — ללא תלות ב-Firebase. מחשבון ה-Apple Developer שלכם, השיגו:
- מפתח אימות APNs (מפתח טוקן
.p8). - ה-Key ID של אותו מפתח.
- ה-Team ID שלכם.
- ה-bundle id של האפליקציה.
Google (FCM)#
דחיפה ב-Android עוברת דרך Firebase Cloud Messaging. מפרויקט ה-Firebase שלכם, השיגו:
- JSON של חשבון שירות עם תפקיד Cloud Messaging.
- מזהה פרויקט ה-Firebase (מסוף Firebase → Project settings) — מוזן כשדה נפרד בטופס הדחיפה בלוח הבקרה לצד ה-JSON של חשבון השירות.
- ה-package name של אפליקציית ה-Android, וחברו את האפליקציה לאותו פרויקט Firebase (
google-services.json).
הגדרה ב-Respondo#
הוסיפו את מפתח ה-APNs ואת חשבון השירות של FCM עם מזהה הפרויקט שלו לערוץ הווידג׳ט שלכם בלוח הבקרה. זה כל מה ש-Respondo צריך כדי לשלוח לשתי הפלטפורמות.
פורמט ה-payload#
ה-payload תמיד שוכן תחת מפתח שורש 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"
}
}כל הערכים הם מחרוזות שטוחות. כותרת וגוף ההתראה נמסרים על ידי תעבורת הפלטפורמה — aps.alert ב-APNs ו- message.notification ב-FCM — ולא בתוך אובייקט ה- respondo.
דחיפות קמפיין כוללות גם delivery_id שמשמש לדיווח על beacon הפתיחה, ועשויות לשאת מפתחות מחרוזת שטוחים נוספים מנתוני הדחיפה של הקמפיין.
טיפול בהקשות ובמצב חזית#
בהקשה על התראה, מסרו את ה-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, ובזמן שאותה שיחה פתוחה בחזית ההתראה המערכתית מדוכאת — ה-SDK מטפל בשני המקרים אוטומטית.
רישום טוקנים של מכשירים#
האפליקציה שלכם משיגה את טוקן המכשיר מתת-מערכת הדחיפה שלה ומעבירה אותו ל- setPushToken. קראו ל- clearPushToken בהתנתקות.
- Android — טוקן הרישום של FCM מ-
FirebaseMessaging.getToken(). - iOS (נייטיבי) — טוקן מכשיר APNs (hex) מ-
didRegisterForRemoteNotificationsWithDeviceToken. - iOS דרך Flutter (firebase_messaging) — השתמשו ב-
getAPNSToken(), לא ב-getToken(). העברת טוקן ה-FCM ב-iOS שולחת אותו ל-APNs, שם הוא אינו טוקן מכשיר תקין והדחיפות לעולם אינן מגיעות.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; Android צריך את טוקן ה-FCM.
final token = Platform.isIOS
? await FirebaseMessaging.instance.getAPNSToken()
: await FirebaseMessaging.instance.getToken();
if (token != null) Respondo.setPushToken(token);
// FCM מחליף מעת לעת את טוקן הרישום שלו; שמרו על Android מסונכרן.
if (!Platform.isIOS) {
FirebaseMessaging.instance.onTokenRefresh.listen(Respondo.setPushToken);
}