当前位置: 首页 > 知识库问答 >
问题:

如何用FCM处理app关闭时的通知?

濮丁雷
2023-03-14
[Service]
[IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
public class MyFirebaseMessagingService : FirebaseMessagingService
{
    const string TAG = "MyFirebaseMsgService";
    public override void OnMessageReceived(RemoteMessage message)
    {
        Log.Debug(TAG, "From: " + message.From);
        MessagingCenter.Send(App.CurrentApp, "ReceivedNotification");
    }

    void SendNotification(string messageBody)
    {
        var intent = new Intent(this, typeof(MainActivity));
        intent.AddFlags(ActivityFlags.ClearTop);
        var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);

        var notificationBuilder = new Android.App.Notification.Builder(this)
            .SetSmallIcon(Resource.Drawable.ic_launcher)
            .SetContentTitle("FCM Message")
            .SetContentText(messageBody)
            .SetAutoCancel(true)
            .SetContentIntent(pendingIntent);

        var notificationManager = NotificationManager.FromContext(this);
        notificationManager.Notify(0, notificationBuilder.Build());
    }
}
protected override void OnCreate(Bundle bundle)
    {


        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(bundle);
        Forms.Init(this, bundle);
        ImageCircleRenderer.Init();

        IsPlayServicesAvailable();

        if (Intent.Extras != null)
        {
            NotificationSendObject notifcation = new NotificationSendObject();
            foreach (var key in Intent.Extras.KeySet())
            {
                switch (key)
                {
                    case "object_id":
                        notifcation.objectId = Intent.Extras.GetString(key);
                        break;
                    case "notification_id":
                        notifcation.notificationId = Intent.Extras.GetString(key);
                        break;
                    case "object_type":
                        notifcation.objectType = Intent.Extras.GetString(key);
                        break;
                }
            }
            if (notifcation.notificationId != null)
            {
                MessagingCenter.Send(App.CurrentApp, "OnTapNotification", notifcation);
            }
        }


        SecureStorageImplementation.StoragePassword = "*****";

        LoadApplication(new App());

    }

共有1个答案

牛昱
2023-03-14
protected override void OnCreate(Bundle bundle)
{


    TabLayoutResource = Resource.Layout.Tabbar;
    ToolbarResource = Resource.Layout.Toolbar;

    base.OnCreate(bundle);
    Forms.Init(this, bundle);
    ImageCircleRenderer.Init();

    IsPlayServicesAvailable();

    SecureStorageImplementation.StoragePassword = "*****";

    LoadApplication(new App());

    if (Intent.Extras != null)
    {
        NotificationSendObject notifcation = new NotificationSendObject();
        foreach (var key in Intent.Extras.KeySet())
        {
            switch (key)
            {
                case "object_id":
                    notifcation.objectId = Intent.Extras.GetString(key);
                    break;
                case "notification_id":
                    notifcation.notificationId = Intent.Extras.GetString(key);
                    break;
                case "object_type":
                    notifcation.objectType = Intent.Extras.GetString(key);
                    break;
            }
        }
        if (notifcation.notificationId != null)
        {
            MessagingCenter.Send(App.CurrentApp, "OnTapNotification", notifcation);
        }
    }

}
 类似资料:
  • 第二个尝试是使用Firebase云消息传递,但据我所知,这种机制只允许发送通知。但如何以编程方式处理事件并创建通知?请给我一个例子或一种方法与FCM或一个更优雅的解决方案,如果它帮助我完成任务。

  • 问题内容: 我试图了解哪些是应用程序的“物理”限制。 在客户端: 在服务器端: 在OSX中达到文件限制(256)时,统计信息如下 让我感到困惑的是: 如果我强行关闭连接(这是我想对客户端执行的操作,为什么我仍在使用文件句柄(因此达到文件限制),请执行以下操作:编辑:添加延迟似乎使服务器可以保持呼吸并且永远不会达到文件限制)? 有没有一种方法可以完全关闭套接字,以便可以确定很少达到文件限制(我知道可

  • 我正在使用ActiveMQ对电子邮件进行排队,消费者读取队列并发送电子邮件。 在启动时,我注册一个生产者,并永远缓存它。 有时,当连接关闭时,生产者无法将消息加入队列。 有人能告诉我处理闭门会议的最佳方式吗?我应该重新注册我的制作人吗?还是有办法重开会话?

  • 我试图找到正确的方法来使用工人围棋例程产生的结果,同时在所有工作完成后优雅地退出结果循环。为了说明,我做了以下示例。我的真实世界案例与这个例子略有不同,因为我不知道每个工人围棋例程将返回多少“工作”,显然这些for循环执行固定数量的结果(5)。 我是goroutines和频道的新手,但以下是我所理解的基本租户; 只有发送者才能关闭频道 在通道上执行将继续,直到通道关闭 这个例子是死锁,因为范围循环

  • 通常情况下,应用启动完成前,还需要初始化数据库,检查特定用户是否存在,启动后台线程. 再例如,程序关闭前,需要关闭索引服务等等. 如何使用@SetupBy 首先, 实现Setup接口.这个接口就2个方法,分别对应启动(init)和关闭(destroy) public void init(NutConfig nc) { Ioc ioc = nc.getIoc(); // 拿到Ioc容器