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

Firebase FCM发送通知OnMessage接收PendingIntent显示当前活动

齐健柏
2023-03-14

我有一个包含多个活动的应用程序。我正在植入Firecbase FCM,除了在接收到通知图标时处理用户单击通知图标时转到哪个活动之外,它都运行得很好。

由于我不确定FirebaseMessagingService是如何/何时实例化的,我无法将其设置为访问我的任何对象。我唯一能做的就是将应用程序中的当前活动存储为

public static Activity CurrentActivity { get; set; }

然后,我在每个活动的OnCreate()中设置上述内容,然后在Firebase MessagingService中设置。OnMessage接收()我将我的挂起意图设置如下:

        Intent intent = new Intent(this, App.CurrentActivity.GetType());

        intent.AddFlags(ActivityFlags.SingleTop);           

        var pendingIntent = PendingIntent.GetActivity(this, App.NOTIFICATION_ID, intent, PendingIntentFlags.OneShot);

        var notificationBuilder = new NotificationCompat.Builder(this, App.CHANNEL_ID)
                                  .SetSmallIcon(Resource.Drawable.ic_notification)
                                  .SetContentTitle("FCM Message")
                                  .SetContentText("test")
                                  .SetAutoCancel(true)    //dismisses the notification on click
                                  .SetContentIntent(pendingIntent);

        var notificationManager = NotificationManagerCompat.From(this);
        notificationManager.Notify(App.NOTIFICATION_ID, notificationBuilder.Build());

到目前为止,当用户单击通知时,它会进入正确的活动。

问题是,当用户在活动a中但没有单击通知并移动到活动B,然后单击通知时,是否接收到通知。我的待定意图将是活动A。但是,在显示通知后,将显示活动A。

我在想,如果它是可能的OnMessageReception()检测应用程序是在前台或后台,然后如果在前台我可以做和意图显示消息的警报对话框,如果在后台,那么我的原始代码将工作正常。

有人知道这是否可能以及如何做到吗?

共有1个答案

欧阳永宁
2023-03-14

我已经设法解决了这个问题,所以我想我会为任何有类似问题的人发布更新。

在我的FirebaseMessagingService中。OnMessageReceived()我创建了一个标准活动的挂起内容,称为NotificationActivity。

public override void OnMessageReceived(RemoteMessage message)

我从消息中提取了正文和标题,并将其传递给NotificationActivity

通知活动。OnCreate()将只显示一个AlertDialog,单击OK(确定)时,我使用this.Finish()关闭了活动

当用户在应用程序中收到通知时,这种方式非常有效。用户可以点击通知,它将显示AlertDialog。在结束时,它只会在当前的活动中恢复。

 类似资料:
  • 当app不再活动(即使是最近的任务)时,如何从FCM接收推送通知。我看到gmail、whatsapp都有这个功能。我正在使用FCM进行推送通知。我使用了WakefulBroadcast接收器来唤醒设备。我怎么用这个? 服务类别:

  • 我已经实现了Android推送通知,我可以在应用程序运行时使用此方法扩展来处理它: 但我真正需要的是在我当前的活动中获取通知数据,以更新一些字段,以便用户实时查看。但我找不到一个方法来做到这一点。有人能帮帮我吗?

  • 我有一个React原生应用程序(在iOS上测试),正在尝试合并推送通知。我正在使用以下模块:https://www.npmjs.com/package/react-native-firebase-push-notifications. 我尝试运行示例应用程序代码,并能够获得(1)消息令牌和(2)从我的设备成功获得权限。 我正在尝试从Firebase发送测试通知,并且正在使用我设备的令牌。但是,触发

  • 我认为通过使用,我可以捕获请求正文,但事实是它什么也没有捕获。如果我理解正确,我应该收到一个结构在这里详细说明的变更资源。是我做错了什么,还是我理解错了?我很感激任何可以给予的洞察力和提前感谢!

  • 我阅读了Microsofts关于在Windows Phone8.0上发送和接收推送通知的文章:

  • 但是当它在后台时打开应用程序,我需要在我的应用程序在前台时打开它。 从firebase文档中可以看到: 当应用程序处于后台时传递的通知。在这种情况下,通知被传递到设备的系统托盘。默认情况下,用户点击通知将打开应用程序启动器。同时具有通知和数据负载的消息,包括后台和前台。在这种情况下,通知被传送到设备的系统托盘,而数据有效载荷被传送到启动程序活动意图的附加部分中。 这是我对的含义 我能够正确获取通知