Firebase 消息在现代 Android 即时应用程序中不起作用 - DisplayNotificationRequired?

Posted

技术标签:

【中文标题】Firebase 消息在现代 Android 即时应用程序中不起作用 - DisplayNotificationRequired?【英文标题】:Firebase Messaging not Working in Modern Android Instant App - DisplayNotificationRequired? 【发布时间】:2020-12-15 22:43:25 【问题描述】:

我已阅读所有相关的 SO 问题,其中大部分是在 2017 年或 2018 年初回答的,当时 Google 简化了即时应用的创建方式。在我的例子中,我创建了一个“支持即时应用的应用程序包”(described here),它既可以用作应用程序,也可以用作即时应用程序。

应用程序包包含我编写的一个库,该库配置为从 AWS 简单通知服务 (SNS) 接收 Firebase 消息 (described here)。问题是在运行应用时收到消息,但在运行免安装应用时没有收到消息。

好消息是,当我查看 AWS CloudWatch 控制台时,我可以看到每次失败的尝试。以下是消息的相关部分:

"providerResponse": "\"results\":[\"error\":\"InvalidParameters: DisplayNotificationRequired\"],\"multicast_id\":\"8198293557962051\",\"success\":0,\"failure\":1,\"canonical_ids\":0"

消息内容是:


"to" : "fi_Pclw7RrWtPm0xMVSgbC:APA91bGJFzM6RQVisO0N_JOAb8rUOKBVPZ0I5jh9Vf-4f-xXtbQY_Ik7q3wLGeCbR5bh_lFWDy0PX-F2mIlamMlCTIuEqEOlk0KcFO9a5fYk6B_omGqevjY6KNiByI5j_vKQaF17Rif8",
 "data" : 
     "body" : "Content message",
     "title": "the Title",  
     "key_1" : "Value for key_1",
     "key_2" : "Value for key_2"
     

我已搜索 DisplayNotificationRequired 错误,但找不到任何内容。任何人都知道这意味着什么以及如何解决?谢谢!


由于我写了上面的内容,我也尝试添加一个通知对象:


"to" : "fi_Pclw7RrWtPm0xMVSgbC:APA91bGJFzM6RQVisO0N_JOAb8rUOKBVPZ0I5jh9Vf-4f-xXtbQY_Ik7q3wLGeCbR5bh_lFWDy0PX-F2mIlamMlCTIuEqEOlk0KcFO9a5fYk6B_omGqevjY6KNiByI5j_vKQaF17Rif8",
    "notification" : 
     "body" : "Content message",
     "title": "the Title"
     ,
 "data" : 
     "body" : "Content message",
     "title": "the Title",  
     "key_1" : "Value for key_1",
     "key_2" : "Value for key_2"
     

现在我收到了 MissingDataUri 错误,而不是 DisplayNotificationRequired 错误。当我使用 Postman 将此消息直接发送到设备令牌时,我也收到 MissingDataUri 错误,所以我认为这不是 AWS SNS 或 Firebase 云消息传递问题,而只是瞬间应用问题。

最后,我了解到,早在 2018 年就有一种“即时应用通知测试版”方式似乎仍在运行:https://g.co/instantapps/notifications

是否仍然无法向即时应用程序发送推送通知,特别是使用“数据”有效负载? (我继续提交了表格……以防万一。)

谢谢大家!

【问题讨论】:

【参考方案1】:

您可以做到这一点的唯一方法是使用附加到前台服务的通知。 即时应用目前无法远程通知。

我能问一下你为什么要这样做吗?免安装应用应该提供即时体验,您应该假设用户要么安装完整版,要么在关闭应用后放弃它。所以远程通知没有多大意义,除非它附加到用户期望的“体验”上。

如果体验需要通知流,您应该使用前台服务。一个很好的例子是,如果您购买了一个有队列的即插即用服务(例如理发店),并且您想在等待期间通知用户。 在这种情况下,您可以创建一个带有附加通知的前台服务。该服务在后台轮询您的后端以获取时间估计和队列位置,然后相应地更新通知。当用户完成理发后,您可以关闭前台服务,从而允许应用程序自动从设备中删除。

阅读有关服务的更多信息:https://developer.android.com/guide/components/services

您需要:https://developer.android.com/reference/android/Manifest.permission#INSTANT_APP_FOREGROUND_SERVICE

【讨论】:

谢谢托克尔。我有适用于 ios 和 Android 的应用程序的本机版本。我对 iOS App Clips 感到兴奋,它默认允许“八小时”推送通知,并希望我可以使用 Android Instant App 做同样的事情。该应用程序通常供大量人使用,但需要相对快速的推送通知,我真的不想轮询我的服务器。我发现了这个:reddit.com/r/androiddev/comments/bkuhre/… 这可能是答案。想法? 还发现了这个:***.com/questions/50317159/…,上面说 2018 年有一个测试计划。我5天前申请了,但没有收到回复。我认为它现在已经过测试版了! 几个月前我研究了同样的事情,最后做了轮询解决方案。请告诉您是否找到了其他东西! 您是否尝试注册测试版计划?如果表格不再继续,他们应该记下表格。我可能会深入研究在前台服务中创建 Firebase 消息传递服务。 好吧,我仍然不相信如果应用程序是即时应用程序,就不可能发送推送通知!我的服务启动得很好,没有错误。我用代码启动它,我也自动启动它。我找不到任何说明这是不可能的,而且我们不能成为过去 3 年中唯一尝试过的两个人!我什至开始使用github.com/onmyway133/PushNotifications 来排除其他一切,但没有运气。如果没有其他事情发生,我会奖励你赏金......

以上是关于Firebase 消息在现代 Android 即时应用程序中不起作用 - DisplayNotificationRequired?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase(Android):我的listView上没有显示图像,一旦我第一次将它上传到存储

android即时消息应用程序[关闭]

android环境下的即时通讯

无法在 Android 中使用 Firebase 应用内消息?

Yotta企业云盘:致力于现代企业的发展

Firebase OTP Auth消息在iOS和Android中有所不同