如何解决同时集成 Firebase Cloud Message 时的冲突?
2024-05-11
当 Call Kit 从 FCM 接收到消息时,如果该消息不是来自 ZEGO SDK,它会发送一个广播到当前应用程序,动作为 com.zegocloud.zegouikit.call.fcm,示例代码如下:
Intent intent = new Intent("com.zegocloud.zegouikit.call.fcm");
intent.putExtra("remoteMessage", remoteMessage);
context.sendBroadcast(intent);因此,如果您已经集成了 Firebase Messaging,只需按照以下步骤完成迁移:
- 
在您的应用程序中创建并静态注册一个 BroadcastReceiver: - 创建一个 BroadcastReceiver,例如 YourCustomBroadcastReceiver.java。
- 将其注册到应用程序的 Manifest.xml文件的application节点,并将动作设置为"com.zegocloud.zegouikit.call.fcm",示例如下:
 <receiver android:name="com.zegocloud.uikit.demo.calloffline.YourCustomBroadcastReceiver" android:enabled="true" android:exported="false"> <intent-filter> <action android:name="com.zegocloud.zegouikit.call.fcm"/> </intent-filter> </receiver>
- 创建一个 BroadcastReceiver,例如 
- 
从 Manifest.xml中删除原始的 FCM Service,示例如下:<service android:name=".java.MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>请删除它以避免与 Zego SDK 冲突。 
- 
监听和处理相关事件: 您需要将逻辑从 MyFirebaseMessagingService迁移到YourCustomBroadcastReceiver,示例如下。原始代码: public class YourFirebaseMsgService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { // 您的自定义逻辑 } }请迁移如下,并删除 YourFirebaseMsgService.java: public class YourCustomBroadcastReceiver extends BroadcastReceiver { private static final String TAG = "CustomReceiver"; public void onReceive(Context context, Intent intent) { com.google.firebase.messaging.RemoteMessage remoteMessage = intent.getParcelableExtra("remoteMessage"); // 您的自定义逻辑 Log.d(TAG, "onReceive.remoteMessage.getData: " + remoteMessage.getData()); } }
按照这些步骤,您应该能够接收和处理您自己的 FCM 消息。


