วิธีการตั้งค่าเครื่องรับออกอากาศหลายเครื่องสำหรับจัดการการแจ้งเตือนแบบพุชบน Android

เผยแพร่แล้ว: 2024-11-23

เครื่องรับการออกอากาศคือตัวจัดการสำหรับรับและประมวลผลการแจ้งเตือนแบบพุชที่ส่งไปยังอุปกรณ์ Android การตั้งค่าเครื่องรับออกอากาศเพียงเครื่องเดียวเพื่อจัดการการแจ้งเตือนแบบพุชไปยังแอปของคุณนั้นเป็นกระบวนการที่ไม่ซับซ้อน

แต่ถ้าคุณต้องการจัดการการแจ้งเตือนแบบพุชจากแหล่งที่แตกต่างกัน จากผู้ให้บริการแจ้งเตือนบุคคลที่สามหลายราย และ/หรือจากเซิร์ฟเวอร์ของคุณเอง เป็นต้น

มีสองวิธีในการทำเช่นนี้

A. การเริ่มต้นเครื่องรับการออกอากาศหลายเครื่องใน 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>

โปรดทราบว่าแม้ว่าผู้รับทั้งสองจะถูกเรียกใช้ในข้อความขาเข้า แต่การจัดการซ้ำซ้อนนั้นไม่น่าเป็นไปได้อย่างมาก เนื่องจากผู้ให้บริการบุคคลที่สามจะเพิกเฉยต่อเพย์โหลดที่ไม่มีตัวระบุเฉพาะของตน หากคุณส่งเพย์โหลดของคุณเอง อย่าลืมใส่ตัวระบุเฉพาะของคุณเองด้วย

นี่เป็นวิธีแก้ปัญหาที่ง่ายที่สุด แต่ค่อนข้างไม่มีประสิทธิภาพ เนื่องจากผู้รับทั้งสองจะถูกเรียกใช้สำหรับการแจ้งเตือนที่เข้ามาทุกครั้ง

ตอนนี้เรามาดูกลยุทธ์ที่สองที่มีประสิทธิภาพมากขึ้นกัน
B. เครื่องรับการออกอากาศทั่วไปหนึ่งเครื่องสำหรับการกำหนดเส้นทางจะพุชไปยังเครื่องรับการออกอากาศที่เกี่ยวข้อง

ในแนวทางที่มีประสิทธิภาพมากขึ้นเรื่อยๆ นี้ คุณจะลงทะเบียนเฉพาะเครื่องรับการออกอากาศที่คุณกำหนดเองเท่านั้น จากนั้นคุณกำหนดเส้นทางการแจ้งเตือนแบบพุชที่เข้ามาผ่านเครื่องรับการออกอากาศของคุณเองไปยังเครื่องรับการออกอากาศเฉพาะหรือไปยังเครื่องรับการออกอากาศอื่น ๆ ทั้งหมด คุณสามารถใช้ดุลยพินิจของตนเองในการตัดสินใจกรณีการใช้งานสำหรับแนวทางใดแนวทางหนึ่งที่กล่าวมาข้างต้น

ในกรณีของ Clevertap เรารู้ว่าเพย์โหลด JSON จาก Clevertap มีคีย์ “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 ของคุณ