Firebase FCM发送通知OnMessageReceived PendingIntent显示当前活动

时间:2019-12-12 17:14:56

标签: android firebase-notifications

我有一个包含多项活动的应用程序。我正在努力使Firecbase FCM正常运行,除了在处理用户单击收到通知图标时应进行的活动之外,所有其他功能都很好。

由于我不确定FirebaseMessagingService的实例化方式/何时实例化,因此无法通过对我的任何对象的访问来对其进行设置。我唯一能做的就是将当前“活动”存储为

public static Activity CurrentActivity { get; set; }

然后我在每个活动的OnCreate()中设置上述内容,然后在FirebaseMessagingService .OnMessageReceived()中,设置待处理的意图,如下所示:

        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。

我在想,是否有可能在OnMessageReceived()中检测到应用程序是在前台还是在后台,那么如果在前台我可以这样做并打算显示消息的警报对话框,如果在后台,则我的原始代码会很好。

有人知道这是否可行吗?

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题,以为我会为有类似问题的其他人发布更新。

在FirebaseMessagingService.OnMessageReceived()中,我创建了一个称为NotificationActivity的标准活动的PendingIntent。

public override void OnMessageReceived(RemoteMessage message)

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

NotificationActivity.OnCreate()将仅显示一个AlertDialog,然后单击OK,我使用this.Finish()

关闭了该活动。

当用户在应用程序中收到通知时,此选项非常适用。用户可以单击通知,它将显示AlertDialog。结束时,它会继续执行当前的活动。