如何在 Android 上用您自己的替换 firebase 通知?
Posted
技术标签:
【中文标题】如何在 Android 上用您自己的替换 firebase 通知?【英文标题】:How to replace firebase notification with your own on Android? 【发布时间】:2018-08-23 06:24:24 【问题描述】:我的 android 应用程序收到 Firebase 通知。我需要本地化此通知取决于客户端的应用程序语言,而不是服务器端。
如果应用程序在前台,我使用来自FirebaseMessagingService
的onMessageReceived()
并推送我自己的本地化通知。但是如果应用程序在后台 onMessageReceived()
不会调用。
在这种情况下,我使用我自己的扩展类BroadcastReceiver
。 onReceive(Context context, Intent intent)
方法捕获通知,我将其本地化并推送。一切顺利,但最后我收到了 2 个推送通知:我自己的本地化和 firebase。
我怎样才能摆脱这个 firebase 通知而只获得我自己的通知?
public class FirebaseDataReceiver extends BroadcastReceiver
Context context;
PendingIntent pendingIntent;
public void onReceive(Context context, Intent intent)
this.context = context;
Bundle dataBundle = intent.getExtras();
String title = "";
String body = "";
String type = "";
String objectId = "";
if (dataBundle != null)
type = dataBundle.getString("type");
objectId = dataBundle.getString("objectId");
title = NotificationUtils.getNotificationTitle(context, dataBundle);
body = NotificationUtils.getNotificationBody(context, dataBundle);
Intent newIntent = new Intent(context, TutorialActivity_.class);
newIntent.putExtra("target", "notification");
newIntent.putExtra("type", type);
newIntent.putExtra("objectId", objectId);
newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
pendingIntent = PendingIntent.getActivity(context,
0,
newIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new Notification.Builder(context)
.setContentTitle(title)
.setContentText(body)
.setPriority(Notification.PRIORITY_HIGH)
.setDefaults(Notification.DEFAULT_ALL)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.setSmallIcon(R.drawable.splash_mini)
.build();
deleteLastNotification();
NotificationManagerCompat.from(context).notify(0, notification);
【问题讨论】:
请使用数据消息而不是通知消息在onMessageReceived()
接收数据,请参考Data Message
我使用数据消息。我唯一需要的是不显示 Firebase 推送通知
【参考方案1】:
您应该真正使用来自服务器的数据通知。普通消息通知无法实现您正在寻找的这种行为。在此处查看文档:https://firebase.google.com/docs/cloud-messaging/concept-options
因此,您从服务器向 Firebase 发出的请求应如下所示:
"message":
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data":
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
代替:
"message":
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":
"title":"Portugal vs. Denmark",
"body":"great match!"
【讨论】:
这些更改将如何帮助我不显示 Firebase 通知而只显示我的通知?或者当应用程序在后台时,来自 FirebaseMessagingService 的 onMessageReceived() 将在这种情况下开始调用?事情是当应用程序在后台时,onMessageReceived() 现在不会调用。因此,尽管我愿意,但 firebase 会推送它的通知 因为消息类型通知和数据类型通知的行为不同。在某些情况下,消息类型的通知由 Android 系统托盘处理以上是关于如何在 Android 上用您自己的替换 firebase 通知?的主要内容,如果未能解决你的问题,请参考以下文章
休眠后,Android应用程序在kindle fire上关闭
如何在点击事件上用嵌入代码替换 OWL Carousel 图像