Android:Android应用可以有多个FirebaseMessagingServices
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android:Android应用可以有多个FirebaseMessagingServices相关的知识,希望对你有一定的参考价值。
我正在构建一个库项目,我有一个FirebaseMessagingService。我的应用中也有FirebaseMesagingService。我看到的是,每当从服务器发送FCM时,只有一个FirebaseMessagingService处理它。当我使用GCM接收器时,情况并非如此。 GCM接收器都用于接收消息,并且基于消息内容,他们将不会做任何事情。
我怎样才能在FCM中实现同样的目标。
您的库的清单不应具有FirebaseMessagingService子类。将messa服务添加到应用程序的清单应该是集成步骤的一部分,集成SDK。此外,您应该在SDK中提供一个钩子,应用程序可以将FCM消息有效负载传递给SDK。
基本上,如果应用程序没有自己的FirebaseMessagingService子类,它会在清单中添加SDK的侦听器服务,否则它会在自己的侦听器服务中添加钩子,该服务将有效负载传递给SDK,SDK采取必要的操作
android应用程序不能有多个FirebaseMessagingService作为其服务而不是接收器。可以做的是检查两个条件:
- 如果app在其功能中注册了FCMMessagingService,则在库项目中提供一个方法,该方法可以将消息作为参数,由app的FCMMessagingService接收。
- 如果应用程序没有集成FCM功能,那么在库项目中使用FCMMessagingService可以处理服务器发送的fcm。
我几天前遇到了同样的问题,在我们的团队中,我们采用了一种略有不同的方法,涉及反思。
通常,我们使用委托类并通过反射提供上下文。
public class OwnPushService extends FirebaseMessagingService {
private List<FirebaseMessagingService> messagingServices = new ArrayList<>(2);
public GCPushService() {
messagingServices.add(new AirshipFirebaseMessagingService());
messagingServices.add(new TLFirebaseMessagingService());
}
@Override
public void onNewToken(String s) {
delegate(service -> {
injectContext(service);
service.onNewToken(s);
});
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
delegate(service -> {
injectContext(service);
service.onMessageReceived(remoteMessage);
});
}
private void delegate(GCAction1<FirebaseMessagingService> action) {
for (FirebaseMessagingService service : messagingServices) {
action.run(service);
}
}
private void injectContext(FirebaseMessagingService service) {
setField(service, "mBase", this); // util method for recursive field search
}
}
如果您对细节感兴趣,我已经写了一篇关于这种方法的文章:link
以上是关于Android:Android应用可以有多个FirebaseMessagingServices的主要内容,如果未能解决你的问题,请参考以下文章
Android持续集成:Jenkins+Github+蒲公英/Fir.im+邮件通知
Android 通过 github actions 自动化打包 并发布 fir.im 爬坑记
Android - 一个应用程序中有两个或多个 GCM 令牌
多个android应用程序可以访问同一个firebase数据库吗?