从启动器图标启动应用程序时如何获取通知数据

Posted

技术标签:

【中文标题】从启动器图标启动应用程序时如何获取通知数据【英文标题】:How to get notification data when the app launched from launcher icon 【发布时间】:2021-12-16 17:37:37 【问题描述】:

我已经实现了一项扩展 FirebaseMessagingService 的服务,并且当应用程序处于前台时,我正在使用它,并使用我的自定义应用程序内通知视图接收到通知。当应用程序处于后台时,正如所有其他 FCM 相关主题和文档here 所建议的那样,它由系统托盘处理,我只需要从已启动活动的捆绑包中获取数据并进行重定向等在那里。

我还需要做的是,当收到通知并通过点击启动器图标启动应用程序时,而不是通过通知。在这种情况下,我需要获取通知数据并再次相应地进行重定向。但在这种情况下,我无法获取附加数据。知道如何在常规应用启动时获取通知数据吗?

【问题讨论】:

您在应用关闭时只需要远程数据,并且不想在那个时候显示通知吗?? 是的,我需要数据,稍后我会在应用程序启动时显示。我知道我可以随时重写 FirebaseMessagingService 的 handleIntent 方法来获取数据,但我不确定这是否正确 有一个解决方案,但我不能说它总是有效。创建一个单独的服务,每 5 秒 ping 一次,并创建一个静态对象,通知您应用程序已打开。如果应用程序是打开的,那么 onMessageReceived 会做任何你想做的事情,如果应用程序关闭意味着静态实例被杀死,然后使用 timeinmillies 存储数据并检查启动器活动中存储的数据以执行你的功能。 不,这工作量太大了。我可以使用 handleIntent 来做类似的事情,但工作量更少,因为每个意图(解雇、新令牌、接收)都会先于其他任何地方落入那里。但是根据文档,我们应该使用 onMessageReceived,所以我不确定这是否正确 好的,我只是建议方法,如果我卡在那里,我会尝试这个,希望你能找到更好的解决方案,如果你没有得到解决方案,请尝试这个,谢谢。 【参考方案1】:

好的,这就是我解决上述情况的方法,它更像是一种解决方法而不是解决方案,但也许有人会发现它对他/她自己的目的有用:

如果收到通知时应用程序在后台,并且它是从应用程序图标而不是通知启动的,那么我会在扩展 FirebaseMessagingService 以存储的服务的 handleIntent 方法中捕获它我本地收到的数据。 如果收到通知时应用程序在后台,并且它是从通知启动而不是从应用程序图标启动的,那么我会从 getIntent().getExtras() 获取通知数据> SplasActivity(这是我的 LAUNCHER 活动) 如果收到通知时应用程序在前台,我会将其显示为应用程序内通知,而不会将任何内容存储到我的本地

然后我删除存储的数据,在我通过通知或应用启动器图标在下一次应用启动时将传入消息显示为应用内通知之后。

这个实现肯定有缺点,但就像我说的那样,它更像是解决方法而不是解决方案。我想一个合适的解决方案应该像this post 中描述的那样将数据作为数据消息 发送。但不幸的是,这不是我的选择。

【讨论】:

以上是关于从启动器图标启动应用程序时如何获取通知数据的主要内容,如果未能解决你的问题,请参考以下文章

在应用启动时获取推送通知详细信息

应用启动后如何获取 iOS 推送通知令牌

如何从 Windows 服务显示通知区域气球和图标?

iOS获取app图标和启动图片名字(AppIcon and LaunchImage's name)

如何获取其他应用的通知图标?

将移动应用程序启动图标放在通知屏幕上以从锁定设备启动