如何防止Android显示来自FCM(Firebase云消息传递)的接收消息?

时间:2018-02-24 14:38:48

标签: android firebase xamarin.android firebase-cloud-messaging

我编写了一个程序,它接收来自firebase的消息,直到程序运行,消息由“FirebaseMessagingService”接收,并且Android不会生成通知,并且消息的管理不是由我编写的程序完成的。

[Service]
[IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
class MyFirebaseMessagingService : FirebaseMessagingService
{
    public override void OnMessageReceived(RemoteMessage message)
    {
    }
}

但是当程序关闭时,“WakefulBroadcastReceiver”会收到消息,但Android也会创建通知,它会向用户显示收到的消息。

    [BroadcastReceiver(Enabled = true, Permission = "com.google.android.c2dm.permission.SEND")]
[IntentFilter(new[] { "com.google.android.c2dm.intent.RECEIVE" }, Categories = new string[] { "XamarinAppFCM.XamarinAppFCM" })]
public class BackgroundBroadcastReciever : Android.Support.V4.Content.WakefulBroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        var service = new Intent(context, typeof(MyService));

        var title = intent.GetStringExtra("gcm.notification.title");
        var message = intent.GetStringExtra("gcm.notification.body");

        service.PutExtra("title", title);
        service.PutExtra("message", message);

        StartWakefulService(context, service);
    }
}

[Service]
public class MyService : IntentService
{
    public MyService() : base("MyService")
    {
    }
    protected override void OnHandleIntent(Intent intent)
    {
        BackgroundBroadcastReciever.CompleteWakefulIntent(intent);
    }

我希望这条消息不会被生成,也不会被用户看到,我可以通过我编写的程序来管理消息的显示。 有时,发送消息的目的是让程序执行命令来执行下载和上载信息等操作。所以用户看不到消息。 请帮帮我。

2 个答案:

答案 0 :(得分:1)

有两种类型的消息传递:

  1. 通知消息
  2. 数据讯息
  3. 通知消息由您的应用在处于活动状态时处理,但当您的应用处于非活动状态时,系统会处理这些消息。相反:数据消息总是由您的应用程序处理。

    因此,为了确保始终处理消息的代码,请发送数据消息(没有classpath:属性)。

    另请参阅Firebase文档中的message types部分。

答案 1 :(得分:0)

只需发送数据消息以防止firebase客户端处理FCM消息。如果fcm消息包含通知,则firebase客户端会对其进行处理并在通知栏中显示通知。

这就是你需要在你的程序中构建数据消息的方法,它将FCM消息发送到FCM服务器以便传送到Android客户端。

JsonElement dealsJson = getDealInJsonFormat();

JsonObject jsonObj = new JsonObject();
jsonObj.addProperty("topic", "deals");
jsonObj.add("data", dealsJson);

JsonObject msgObj = new JsonObject();
msgObj.add("message", jsonObj);

log.info("json  message "+msgObj.toString());

return msgObj.toString();

完整示例,您可以查看http://www.zoftino.com/android-notification-data-messages-from-app-server-using-firebase-cloud-messaging