كيفية إعداد أجهزة استقبال بث متعددة للتعامل مع إشعارات الدفع على نظام Android

نشرت: 2024-11-23

أجهزة استقبال البث هي معالجات لتلقي ومعالجة إشعارات الدفع المرسلة إلى جهاز يعمل بنظام Android. يعد إعداد جهاز استقبال بث واحد للتعامل مع الإشعارات المباشرة لتطبيقك عملية مباشرة.

ولكن ماذا لو كنت بحاجة إلى التعامل مع الإشعارات الواردة من مصادر مختلفة؛ من موفري إشعارات الدفع من جهات خارجية متعددة و/أو من خوادمك الخاصة، على سبيل المثال؟

هناك طريقتان للقيام بذلك.

أ. تهيئة العديد من أجهزة استقبال البث في AndroidManifest.xml

عند تهيئة جهازي استقبال بث أو أكثر في ملف AndroidManifest.xml الخاص بتطبيقك، يتم استدعاء كل من أساليب onReceive الخاصة بجهاز الاستقبال عندما يتلقى تطبيقك إشعارًا بالدفع. أدناه، لدي كود xml لكيفية الحصول على جهاز استقبال بث لـ CleverTap وجهاز استقبال بث لتطبيقي الخاص LocalBot.

<receiver android:name="com.example.LocalBot.MyBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE"/> <action android:name="com.google.android.c2dm.intent.REGISTRATION"/> <category android:name="com.example.LocalBot"/> </intent-filter> </receiver> <receiver android:name="com.clevertap.android.sdk.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE"/> <action android:name="com.google.android.c2dm.intent.REGISTRATION"/> <category android:name="com.example.LocalBot"/> </intent-filter> </receiver>
<receiver android:name="com.example.LocalBot.MyBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE"/> <action android:name="com.google.android.c2dm.intent.REGISTRATION"/> <category android:name="com.example.LocalBot"/> </intent-filter> </receiver> <receiver android:name="com.clevertap.android.sdk.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE"/> <action android:name="com.google.android.c2dm.intent.REGISTRATION"/> <category android:name="com.example.LocalBot"/> </intent-filter> </receiver>

لاحظ أنه على الرغم من أنه سيتم استدعاء كلا المستقبِلين في رسالة واردة، إلا أن المعالجة المزدوجة غير محتملة إلى حد كبير حيث سيتجاهل موفرو الطرف الثالث الحمولات التي لا تحتوي على معرفاتهم الفريدة. إذا كنت ترسل حمولاتك الخاصة، فتأكد من تضمين معرف فريد خاص بك.

هذا هو الحل الأبسط، ولكنه غير فعال إلى حد ما حيث سيتم استدعاء كلا المتلقيين لكل إشعار وارد.

دعونا الآن نلقي نظرة على الاستراتيجية الثانية الأكثر كفاءة.
ب. يقوم جهاز استقبال بث مشترك واحد للتوجيه بالدفع إلى أجهزة استقبال البث ذات الصلة.

في هذا النهج الأكثر فعالية بشكل متزايد، يمكنك تسجيل جهاز استقبال البث المخصص الخاص بك فقط. يمكنك بعد ذلك توجيه إشعار الدفع الوارد من خلال جهاز استقبال البث الخاص بك إما إلى جهاز استقبال بث محدد أو إلى جميع أجهزة استقبال البث الأخرى. يمكنك استخدام تقديرك الخاص لتحديد حالة الاستخدام لأي من الأساليب المذكورة أعلاه.

في حالة Clevertap، نعلم أن حمولة JSON منها تحتوي على المفتاح "nm". يمكن استخدام هذا لتحديد إشعار دفع Clevertap وإعادة توجيه الإشعار إلى معالج البث الخاص بـ Clevertap. وبالمثل، في حالة Parse أو Appboy أو Localytics، يمكنك الاطلاع على وثائق واجهة برمجة التطبيقات (API) الخاصة بهم لمعرفة الطريقة التي يمكن بها التعرف بشكل فريد على حمولة JSON الخاصة بهم.
سأقوم أدناه بالتعرف على جزء صغير من التعليمات البرمجية حيث لدي معالج البث الخاص بي، MyBroadcastReceiver.java. هذا هو معالج البث الذي تمر من خلاله جميع إشعارات الدفع. لدي فحص حالة لمعرفة ما إذا كانت الدفعة قد جاءت من Clevertap، وإذا كان الأمر كذلك، قم بتمريرها إلى معالج البث الخاص بـ Clevertap. بخلاف ذلك، أقوم بتمريرها إلى معالج حمولة JSON الخاص بي. افترض من أجل هذه المناقشة أنني أتوقع فقط إشعارات الدفع من Clevertap والخوادم الخاصة بي.
أولاً قمت بتضمين معالج البث الخاص بي في ملف AndroidManifest.xml الخاص بي كما يلي: -

<receiver android:name="com.example.LocalBot.MyBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE"/> <action android:name="com.google.android.c2dm.intent.REGISTRATION"/> <category android:name="com.example.LocalBot"/> </intent-filter> </receiver>
<receiver android:name="com.example.LocalBot.MyBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE"/> <action android:name="com.google.android.c2dm.intent.REGISTRATION"/> <category android:name="com.example.LocalBot"/> </intent-filter> </receiver>

ثم قمت بإنشاء فئة MyBroadcastReceiver على النحو التالي: -

package com.example.LocalBot; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.content.WakefulBroadcastReceiver; import android.util.Log; import com.clevertap.android.sdk.CleverTapAPI; import com.clevertap.android.sdk.GcmBroadcastReceiver; import com.google.android.gms.gcm.GoogleCloudMessaging; public class MyBroadcastReceiver extends WakefulBroadcastReceiver { public void onReceive(Context context, Intent intent) { Bundle extras = intent.getExtras(); GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context); String messageType = gcm.getMessageType(intent); if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) { String ctpn = extras.getString(CleverTapAPI.NOTIFICATION_TAG); if(ctpn!=null && ctpn.equals("true")) { GcmBroadcastReceiver obj = new GcmBroadcastReceiver(); obj.onReceive(context, intent); } } else { MyHandler obj = new MyHandler(); obj.handlePush(intent); } } }
package com.example.LocalBot; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.content.WakefulBroadcastReceiver; import android.util.Log; import com.clevertap.android.sdk.CleverTapAPI; import com.clevertap.android.sdk.GcmBroadcastReceiver; import com.google.android.gms.gcm.GoogleCloudMessaging; public class MyBroadcastReceiver extends WakefulBroadcastReceiver { public void onReceive(Context context, Intent intent) { Bundle extras = intent.getExtras(); GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context); String messageType = gcm.getMessageType(intent); if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) { String ctpn = extras.getString(CleverTapAPI.NOTIFICATION_TAG); if(ctpn!=null && ctpn.equals("true")) { GcmBroadcastReceiver obj = new GcmBroadcastReceiver(); obj.onReceive(context, intent); } } else { MyHandler obj = new MyHandler(); obj.handlePush(intent); } } }

الآن ستمر جميع إشعارات الدفع عبر جهاز استقبال البث الخاص بي، MyBroadcastReceiver.java وسيتم توجيهها إلى معالج البث المعني وفقًا لذلك.
في حالة رغبتك في تمرير إشعار إلى جميع أجهزة استقبال البث لديك، يمكنك إزالة علامات التحقق if else وإجراء مكالمة لجميع أجهزة استقبال البث لديك، كما هو موضح أدناه: -

 public class MyBroadcastReceiver extends WakefulBroadcastReceiver { public void onReceive(Context context, Intent intent) { Bundle extras = intent.getExtras(); GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context); String messageType = gcm.getMessageType(intent); if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) { new com.clevertap.android.sdk.GcmBroadcastReceiver().onReceive(context, intent); new MyNotificaitonHandler().handleReq(intent); } }


آمل أن تكون قد استمتعت بقراءة منشور المدونة هذا وطوّرت فهمًا جيدًا لكيفية إعداد أجهزة استقبال بث متعددة لتطبيق Android الخاص بك.