Firebase 消息传递无法在现代 Android 即时应用程序中运行 - DisplayNotificationRequired?

2024-01-28

我已经阅读了所有相关的 SO 问题,其中大部分是在 2017 年或 2018 年初回答的,当时 Google 简化了即时应用程序的创建方式。就我而言,我创建了一个“即时启用的应用程序包”(此处描述 https://developer.android.com/topic/google-play-instant/getting-started/instant-enabled-app-bundle)既可以作为应用程序使用,也可以作为即时应用程序使用。

该应用程序包包含我编写的一个库,该库配置为接收 Firebase 消息(此处描述 https://firebase.google.com/docs/cloud-messaging) 来自 AWS 简单通知服务 (SNS)。问题是应用程序运行时会收到消息,但即时应用程序运行时不会收到消息。

好消息是,当我查看 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"
     }
}

我已经搜索过需要显示通知错误但找不到任何东西。有人知道这意味着什么以及如何解决吗?谢谢!


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

{
"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"
     }
}

现在我收到错误缺失数据Uri代替需要显示通知错误。当我使用 Postman 将此消息直接发送到设备令牌时,我还得到了缺失数据Uri错误,所以我认为这不是 AWS SNS 或 Firebase 云消息传递问题,而只是即时应用程序问题。

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

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

谢谢大家!


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

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase 消息传递无法在现代 Android 即时应用程序中运行 - DisplayNotificationRequired? 的相关文章

  • 与 Admob 广告单元 ID 混淆

    我跟着tutorial https developers google com admob android quick start在我的应用程序中创建广告横幅 到目前为止 这有效 我可以看到测试广告 但是 本教程指示我在两个不同的位置使用两
  • Android SoundPool 堆限制

    我正在使用 SoundPool 加载多个声音剪辑并播放它们 据我所知 它的功能 100 正确 但在 load 调用期间 我的日志中充斥着以下内容 06 09 11 30 26 110 ERROR AudioCache 23363 Heap
  • 如何从 SQLite 获取记录总数

    我正在尝试从 Sqlite DB 获取行的总数 以下是我想要做的代码片段 我不知道我在这里做错了什么 public static int getTotalCount Context context Cursor c null try c g
  • Phonegap - 如何将.txt文件保存在Android手机的根目录中

    我正在尝试使用phonegap 将 txt 文件保存在Android 手机的根目录中 我已经安装了这些插件 cordova plugin file 和 cordova plugin file transfer 在 config xml 文件
  • 如何查找 Android 设备中的所有文件并将它们放入列表中?

    我正在寻求帮助来列出 Android 外部存储设备中的所有文件 我想查找所有文件夹 包括主文件夹的子文件夹 有办法吗 我已经做了一个基本的工作 但我仍然没有得到想要的结果 这不起作用 这是我的代码 File files array file
  • Firebase:如何在Android应用程序中设置默认通知渠道?

    如何设置default通知渠道通知消息当应用程序在后台运行时会出现什么情况 默认情况下 这些消息使用 杂项 通道 如你看到的在官方文档中 https firebase google com docs cloud messaging andr
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • minHeight 有什么作用吗?

    在附图中 我希望按钮列与图像的高度相匹配 但我也希望按钮列有一个最小高度 它正确匹配图像的高度 但不遵守 minHeight 并且会使按钮向下滑动 我正在为按钮列设置这些属性
  • 带有自定义阵列适配器的微调器不允许选择项目

    我使用自定义阵列适配器作为微调器 但是 当在下拉列表中选择一个项目时 下拉列表保留在那里 并且微调器不会更新 这是错误行为 与使用带有字符串的通用数组适配器相比 这是自定义类 我错过了什么吗 谢谢 public class Calendar
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • 使用 Matrix.setPolyToPoly 选择位图上具有 4 个点的区域

    我正在 Android 上使用位图 在使用 4 个点选择位图上的区域时遇到问题 并非所有 4 点组都适合我 在某些情况下 结果只是一个空白位图 而不是裁剪后的位图 如图所示 并且 logcat 中没有任何错误 甚至是内存错误 这是我用来进行
  • 如何在不更改手机语言的情况下更改Android应用程序语言?

    我希望用户在应用程序内选择一种语言 选择语言后 我希望字符串使用特定语言 如果我更改手机语言 那么我的应用程序将以设置的语言运行 我无法找到任何在不更改手机语言的情况下设置语言的方法 此外 一旦设置了语言 更改就应该反映出来 有人可以建议一
  • Android 设备上的静默安装

    我已经接受了一段时间了 在 Android 上静默安装应用程序是不可能的 也就是说 让程序安装捆绑为 APK 的应用程序 而不提供标准操作系统安装提示并完成应用程序安装程序活动 但现在我已经拿到了 Appbrain 快速网络安装程序的副本
  • 通过 ADB 拔出设备:“找不到服务”

    我必须测试我的应用程序在打瞌睡模式下的行为 根据文档 https developer android com training monitoring device state doze standby html testing doze 我
  • 下载后从谷歌照片库检索图像

    我正在发起从图库中获取照片的意图 当我在图库中使用 Nexus 谷歌照片应用程序时 一切正常 但如果图像不在手机上 在 Google Photos 在线服务上 它会为我下载 选择图像后 我将图像发送到另一个活动进行裁剪 但在下载的情况下 发
  • 用于推送通知的设备令牌

    我正在实施推送通知服务 我需要创建一个数据库来存储 4 个移动平台的所有设备令牌 我想根据他们的平台 iOS Android BlackBerry WP7 来组织它们 但是有什么方法可以区分平台 这样如果我只想向 Android 用户发送消
  • 为什么Android的ImageReader类这么慢?

    我尝试了适用于 Android 3 4 1 的全新 OpenCVJavaCamera2View但它太慢了 仅显示相机视图约 15 fps 当我尝试较旧的JavaCameraView相反 它给了我很好的结果 30fps 这是我相机的极限 我想
  • 在 Android 中,如何将字符串从 Activity 传递到 Service?

    任何人都可以告诉如何将字符串或整数从活动传递到服务 我试图传递一个整数 setpossition 4 但它不需要 启动时总是需要 0 Service 我不知道为什么我不能通过使用 Service 实例从 Activity 进行操作 publ

随机推荐