我编写了一个程序,该程序从firebase接收消息,直到程序运行,消息是由" Firebasemessagingservice"接收的消息,并且不会由Android生成通知,并且消息的管理不执行。我写的程序。
[Service]
[IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
class MyFirebaseMessagingService : FirebaseMessagingService
{
public override void OnMessageReceived(RemoteMessage message)
{
}
}
但是,当该程序关闭时," WawdfulBroadCastreceiver"收到了消息,但是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);
}
我希望用户不会生成和看不到此消息,并且可以通过我编写的程序管理消息的显示。有时,发送消息的目的是执行程序命令来执行下载和上传信息之类的事情。因此,用户看不到消息。请帮助我。
有两种类型的消息传递:
- 通知消息
- 数据消息
通知消息是由您的应用程序处于活动状态时处理的,但是当您的应用程序不活动时,它们会由系统处理。相反:数据消息始终由您的应用程序处理。
因此,为了确保它始终是您的代码处理消息,请发送数据消息(没有notification
属性(。
还请参见Firebase文档中消息类型的部分。
只需发送数据消息即可防止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-server-using-firebase-clous-cloud-cloud-messaging