我有一个包含多项活动的应用程序。我正在努力使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()中检测到应用程序是在前台还是在后台,那么如果在前台我可以这样做并打算显示消息的警报对话框,如果在后台,则我的原始代码会很好。
有人知道这是否可行吗?
答案 0 :(得分:0)
我设法解决了这个问题,以为我会为有类似问题的其他人发布更新。
在FirebaseMessagingService.OnMessageReceived()中,我创建了一个称为NotificationActivity的标准活动的PendingIntent。
public override void OnMessageReceived(RemoteMessage message)
我从消息中提取了正文和标题,并传递给NotificationActivity
NotificationActivity.OnCreate()将仅显示一个AlertDialog,然后单击OK,我使用this.Finish()
当用户在应用程序中收到通知时,此选项非常适用。用户可以单击通知,它将显示AlertDialog。结束时,它会继续执行当前的活动。