6

我在适用于 iOS 和 Android 的 adobe air 应用程序中的推送通知有一个奇怪的问题。

我正在使用 Milkman Games 的 Easy Push ANE 和 One Signal 服务。

问题是通知确实会到达,但有时(随机)消息在发送后可能需要长达 15 分钟才能到达设备。

这对我的应用程序(出租车预订应用程序)至关重要,因为我依靠推送通知来进行出租车应用程序和用户应用程序之间的通信。因此,例如,如果用户请求打车,最多可能需要 15 分钟才能通知打车应用程序。

与 One Signal 支持人员交谈,根据他们的说法,他们一切都很好,如果我查看 One Signal 仪表板,通知几乎总是立即发送。

这种延误的原因可能是什么?我能做些什么来让事情变得更好?

谢谢你。

4

4 回答 4

16

通常推送通知确实会很快到达。但是在一些罕见的情况下,我们看到它们被延迟:

Android 设备上的通知延迟:

  1. 一些家用和商用 wifi 路由器会导致设备与 Google 的 GCM 服务器的连接关闭。设备稍后会重新打开连接并接收延迟通知。(在这里讨论:https ://groups.google.com/forum/#!topic/android-gcm/Y33c9ib54jY )

  2. 某些自定义版本的 Android 操作系统具有节电设置,可能会导致通知延迟或被忽略。例如,索尼 Xperia 设备具有“耐力模式”。(此处讨论:https ://talk.sonymobile.com/t5/Xperia-Z3-Compact/Notifications-not-Working-When-Phone-in-Sleep-Mode/td-p/879641 )

  3. 某些 Android 设备在电池电量不足时会进入低电量模式,这可能会导致接收通知略有延迟。

iOS 设备上的通知延迟:

  1. 在向具有开发配置文件的设备构建发送通知时,Apple 的 APNS 服务器有时可能不太快或不太可靠。您可以比较使用 AdHoc 配置文件和生产推送证书构建的应用程序版本,看看它是否工作得更好。在不久的将来,Apple 将改变这个系统的工作方式,这样这个问题就会消失。

  2. 与 Android 一样,某些 wifi 路由器会导致 iOS 通知传递延迟。

  3. 如果为应用程序选中“限制后台数据”,如果在高级设置中打开了 Wifi-Optimization,或者如果启用了优先模式,则通知可能会延迟。

WhatsApp 在其常见问题页面底部有一个很好的关于故障排除延迟的 Android 和 iOS 通知的说明列表:https ://www.whatsapp.com/faq/en/android/20887936

总体而言,上述问题很少见,几乎所有用户都会及时收到通知。但是,对于您的特定用例,您可能会发现短信是一种更可靠的工具。

于 2015-09-30T20:02:30.253 回答
1

我还在处理手机中大多数应用程序中的延迟通知。最后,在互联网上进行了长时间的搜索并尝试了禁用电池优化、自适应通知和所有那些根本没有帮助的功能等常见建议后,我找到了 XDA 开发者论坛,我终于找到了这个问题的根源。

此问题是由称为“DOZE”的功能引起的,该功能自 Android 6 起在 Android 核心中实现。

https://developer.android.com/training/monitoring-device-state/doze-standby

基本上它所做的是它试图以一种非常激进的方式保持手机电池寿命,基本上将所有应用程序和网络活动置于待机状态,直到出现维护窗口。维护窗口是一个非常短的时间段,其中来自队列中等待的应用程序的所有事件被立即处理,然后它使所有应用程序再次进入待机状态,直到下一个维护窗口发生。

问题是,随着每个下一个维护窗口,这些窗口之间的间隔每次都会增加,直到某个长期限制。因此,如果您有较长时间(例如半小时)没有触摸手机并且事件发生,您将在下一个维护窗口中收到通知,该窗口可能是从那一刻起的几十分钟。

我不知道谷歌可以如何行事,因为这没问题。它不是!!对我来说,这导致我的外汇交易应用程序出现严重问题,在事件发生时没有按时显示价格警报,而是在 5、15、30 分钟甚至近 1 小时后显示!这对我没有用,因为交易的机会已经消失了......

因此解决方案是使用 ADB 命令手动禁用手机中的“打瞌睡”。我做到了,它有效,现在我收到即时通知。不幸的是,每次手机重启后都必须这样做,因为它会再次打开打盹。

这是一个包含更多详细信息的页面:

Android:在 Android M 中完全禁用 deviceidle(“Doze”)?

基本上你只需发出这个 ADB 命令:dumpsys deviceidle disable

您也可以将应用程序放入 Doze 白名单,但不确定它是否有效,当我显示列表时,我发现我的交易应用程序已经存在,可能是因为我将其从省电政策中删除但 Doze 可能仍在暂停一切,所以它只在那些维护窗口中工作。我猜它不会使用 DOZE 描述中描述的那些“高优先级 FCM 消息”来立即强制通知。

如果您不熟悉 ADB,这里有一些信息:

https://developer.android.com/studio/command-line/adb

我使用了一个付费应用程序,它允许直接从手机连接本地 ADB,所以我可以在每次重启后禁用 DOZE。更多信息在这里:

https://forum.xda-developers.com/t/say-hello-to-ladb-a-local-adb-shell-without-needing-root-or-a-computer.4204855/

令人遗憾的是,作为即时通知的基本功能必须由用户通过开发人员调试界面而不是谷歌来修复,谷歌可以在操作系统本身中修复它......谷歌感到羞耻......

有关此主题的更多论坛:

https://forum.xda-developers.com/t/psa-how-to-fix-the-notification-delay-or-non-receipt-issue-truly-pathetic-of-google-and-samsung.4276505/

https://forum.xda-developers.com/t/delayed-notification-problems-s21-ultra.4243105/page-5

于 2021-12-29T10:01:06.357 回答
0

就我而言,在我发送到 APNS 的有效负载中,我将“附件”属性作为“”发送。当我将其更改为 null 时,问题就消失了。

代替

"attachment": ""

"attachment": null

我不知道为什么,但奇怪的是它导致通知延迟到 1.5 分钟左右。

于 2021-01-05T08:51:43.127 回答
-1

貌似网上没有关于打盹模式的详细分析和资料。一些关键问题,如延迟通知、浏览器选项卡和 ui 不断重新加载等,一定是由于 Android 操作系统的打瞌睡和自动杀戮/内存处理。这两件事有时可能联系在一起,因此它们结合在一起。很明显,作为操作系统的 Android 还不稳定(不幸的是多年之后),有很多小/大问题,但最糟糕的是,谷歌及其开发团队似乎没有做太多事情。也许主要问题是Android/Java本身,也许Java不是一个稳定的好操作系统的好选择。或者问题可能是谷歌没有很多优秀的开发人员来处理问题和人们的请求。也许两者结合,我认为最有可能。

无论如何,对于那些想要分析打瞌睡的人以及那些已经不知道这些的人来说,这里有一些小技巧:

  • 无线调试功能可用于将设备与计算机/adb 工具连接。因此,在连接进行测试时无需使用 USB 数据线和为手机充电。我认为由于 Android 11 大多数设备在开发人员选项下都有无线调试选项,因此无需 USB 电缆设置即可本机工作。如果没有可用的 wifi 调试(11 之前的 Android 版本),则可以使用 USB 电缆进行设置。

  • “adb shell dumpsys deviceidle”这个命令总结了一些信息,如打盹和子状态的状态,可用于在打盹/应用程序测试期间检查当前状态。

  • 您可以在线查看其他 adb doze 命令及其效果,例如强制打盹、启用/禁用它等。

于 2022-02-01T11:51:43.843 回答