پش نوٹیفکیشنز
ایپ بند ہونے کے باوجود نمائندوں کے جوابات اور مہمات پہنچائیں، ایسے ڈیپ لنک کے ساتھ جو سیدھا درست گفتگو میں لے جائے۔ پش کا نظام آپ کی ایپ کے ہاتھ میں رہتا ہے؛ SDK ٹوکن رجسٹر کرتا اور گفتگوئیں کھولتا ہے۔
Respondo کیا بھیجتا ہے#
- پیغام کے پش — کسی ایسی گفتگو میں نمائندے یا AI کا جواب جس میں وزیٹر شامل ہے۔
- مہم کے پش — باہر جانے والی پش مہمات، جو کھلنے کا بیکن بھی رپورٹ کرتی ہیں۔
پیغام کے پش میں ہمیشہ respondo://conversation/<id>کی شکل کا ڈیپ لنک ہوتا ہے۔ مہم کے پش میں وہ ڈیپ لنک ہوتا ہے جو مہم پر ترتیب دیا گیا ہو — یہ اختیاری ہے، اور مقرر نہ ہو تو پش میں کوئی ڈیپ لنک نہیں ہوتا۔
Apple (APNs)#
iOS کے پش سیدھے APNs پر چلتے ہیں — Firebase پر کوئی انحصار نہیں۔ اپنے Apple Developer اکاؤنٹ سے یہ حاصل کریں:
- ایک APNs Auth Key (
.p8ٹوکن کلید)۔ - اُس کلید کا Key ID۔
- آپ کا Team ID۔
- ایپ کا bundle id۔
Google (FCM)#
Android کے پش Firebase Cloud Messaging سے گزرتے ہیں۔ اپنے Firebase پروجیکٹ سے یہ حاصل کریں:
- Cloud Messaging رول والا ایک service account JSON۔
- Firebase project ID (Firebase کنسول → Project settings) — جو ڈیش بورڈ کے پش فارم میں service-account JSON کے ساتھ اپنے الگ خانے میں درج ہوتا ہے۔
- Android ایپ کا package name، اور ایپ کو اسی Firebase پروجیکٹ سے جوڑیں (
google-services.json)۔
Respondo میں ترتیب#
ڈیش بورڈ میں اپنے ویجٹ چینل میں APNs کلید اور FCM service account اس کے project ID سمیت شامل کریں۔ دونوں پلیٹ فارمز پر بھیجنے کے لیے Respondo کو بس اتنا ہی چاہیے۔
payload کا فارمیٹ#
پے لوڈ ہمیشہ جڑ کی respondo کلید کے نیچے ہوتا ہے — اسی کی موجودگی سے SDK اپنے پش کو دوسروں سے الگ پہچانتا ہے (iOS پر userInfo میں، Android پر data["respondo"]میں JSON سٹرنگ کے طور پر)۔
{
"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"
}
}تمام قدریں سادہ (flat) سٹرنگز ہیں۔ نوٹیفکیشن کا عنوان اور متن پلیٹ فارم کے ٹرانسپورٹ سے پہنچتے ہیں — APNs پر aps.alert اور FCM پر message.notification — نہ کہ respondo آبجیکٹ کے اندر۔
مہم کے پش میں ایک delivery_id بھی شامل ہوتا ہے، جو کھلنے کا بیکن بھیجنے کے لیے استعمال ہوتا ہے، اور وہ مہم کے push data سے اضافی flat سٹرنگ کلیدیں بھی ساتھ لا سکتے ہیں۔
ٹیپ اور فورگراؤنڈ کو سنبھالنا#
نوٹیفکیشن پر ٹیپ ہوتے ہی خام پے لوڈ SDK کے حوالے کر دیں۔ وہ پے لوڈ پارس کرتا ہے اور درست گفتگو کھول دیتا ہے، اور اگر پش Respondo کا نہ ہو تو false لوٹاتا ہے (ایسی صورت میں اسے خود سنبھالیں)۔
Android: RespondoPushPayload.from(data)?.let { Respondo.handlePush(it) }
iOS: Respondo.handlePush(userInfo: userInfo)
Flutter: Respondo.handlePushData(message.data)دہرے پش message_id کے حساب سے ایک کر دیے جاتے ہیں، اور جب تک وہی گفتگو فورگراؤنڈ میں کھلی ہو، سسٹم کا نوٹیفکیشن دبا دیا جاتا ہے — دونوں کام SDK خود بخود کرتا ہے۔
ڈیوائس ٹوکن کی رجسٹریشن#
آپ کی ایپ اپنے پش سسٹم سے ڈیوائس ٹوکن لیتی ہے اور اسے setPushToken کو دیتی ہے۔ لاگ آؤٹ پر clearPushToken کال کریں۔
- Android —
FirebaseMessaging.getToken()سے ملنے والا FCM رجسٹریشن ٹوکن۔ - iOS (نیٹو) —
didRegisterForRemoteNotificationsWithDeviceTokenسے ملنے والا APNs ڈیوائس ٹوکن (hex)۔ - Flutter کے ذریعے iOS (firebase_messaging) —
getAPNSToken()استعمال کریں،getToken()نہیں۔ iOS پر FCM ٹوکن بھیجنے کا مطلب ہے کہ وہ 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);
}