Firebase 消息在现代 Android Instant App 中不起作用 - DisplayNotificationRequired?

Firebase Messaging not Working in Modern Android Instant App - DisplayNotificationRequired?

我已经阅读了所有相关的 SO 问题,其中大部分是在 Google 简化即时应用程序的创建方式之前,在 2017 年或 2018 年初的回答中提出的。就我而言,我创建了一个“启用即时应用程序包”(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 年就有一个“即时应用通知测试版”似乎仍然 运行ning:https://g.co/instantapps/notifications

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

谢谢大家!

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

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

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

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

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