我编写了一个程序,它接收来自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);
}
我希望这条消息不会被生成,也不会被用户看到,我可以通过我编写的程序来管理消息的显示。 有时,发送消息的目的是让程序执行命令来执行下载和上载信息等操作。所以用户看不到消息。 请帮帮我。
答案 0 :(得分:1)
有两种类型的消息传递:
通知消息由您的应用在处于活动状态时处理,但当您的应用处于非活动状态时,系统会处理这些消息。相反:数据消息总是由您的应用程序处理。
因此,为了确保始终处理消息的代码,请发送数据消息(没有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();