如何在 Android 上用您自己的替换 firebase 通知?

Posted

技术标签:

【中文标题】如何在 Android 上用您自己的替换 firebase 通知?【英文标题】:How to replace firebase notification with your own on Android? 【发布时间】:2018-08-23 06:24:24 【问题描述】:

我的 android 应用程序收到 Firebase 通知。我需要本地化此通知取决于客户端的应用程序语言,而不是服务器端。

如果应用程序在前台,我使用来自FirebaseMessagingServiceonMessageReceived() 并推送我自己的本地化通知。但是如果应用程序在后台 onMessageReceived() 不会调用。

在这种情况下,我使用我自己的扩展类BroadcastReceiveronReceive(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上关闭

如何在 x 和 y 轴上用逗号替换点? [复制]

检测应用程序正在 Kindle Fire 上运行

如何在点击事件上用嵌入代码替换 OWL Carousel 图像

如何在特定创建的文件上用 `inotifywait` 替换 `until.. sleep`?

Android开发 开发的拍照功能放到手机上用不显示图像,是黑色的