Android 的可靠推送通知
Reliable Push Notifications with Android
我是 Android 编程的新手,投入了大量时间阅读和测试有关服务和推送通知的所有内容。我要求我的应用程序为用户提供 可靠 (就交付时间而言,不到一分钟)通知。为此我有一些问题,我仍然没有找到答案:
FirebaseCloudMessaging (FCM) 是否仍然 "unreliable"。参考 2014 年的这一声明,Google 的连接刷新率是每 15 分钟一次 wifi 和每 28 分钟一次移动连接 https://productforums.google.com/forum/#!msg/nexus/fslYqYrULto/lU2D3Qe1mugJ。现在还是这样吗? Firebase 有比 GCM 更可靠的连接管理吗?我知道这并不意味着通知仅在这段时间之后才推送,但是当必须将警告或错误消息推送给用户时,连接失败并仅在 15 分钟后重新建立的可能性不适合我的用例。
为 Android 创建服务的最佳方法是什么,它保持与服务器的连接并侦听消息。我的问题是,(尤其是 API-Level 23 /Android 6.0 及其激进的电源管理)每个服务几乎立即暂停或停止。即使是在一小时后以某种方式释放的唤醒锁也不可靠。是的,我可以尝试合并所有方法来重新激活 Phone 或应用程序(计时器、警报、延迟处理程序、唤醒锁,...)以保持连接,但所有这些仍然有可能失败我的警告没有发出。我在这里遗漏了什么吗?
是否可以为不太可能被系统杀死的非 root 设备创建守护进程?是否可以创建类似看门狗的东西来观察服务及其状态,并在必要时重新启动它?
Facebook 或 Whatsapp 等大型应用程序如何实现这一点? Facebook 还在使用 MQTT 吗?
是否有实现此类服务的开源项目?
1) 通过 GCM / FCM 发送的通知仍然非常不可靠,不适合实时、关键任务交付。心跳间隔自 2014 年以来略有下降,但 WhatsApp 和 Facebook 等流行应用程序仍在使用自己的推送通知解决方案,使用 XMPP 和 MQTT 协议实现。这一定意味着 FCM 对于关键任务交付还不够可靠。
2) 在最近的 Android 版本中处理最近的节能优化在维护推送通知的后台连接方面变得越来越困难。打瞌睡模式会终止您服务的网络连接,后台执行限制会在您的应用进入后台时终止您的服务。
3) foreground service comes to mind, but this will require your app to display a non-cancelable notification while the service is running. The system will not terminate your foreground service as long as it is running, but the obvious drawback is that your app must display this notification which the user will probably find annoying. Otherwise, try using the JobScheduler APIs 使您的服务适应新的电池优化功能。
4) 如前所述,WhatsApp 仍然使用 XMPP,而 Facebook Messenger 仍然使用 MQTT。
5) 您也许可以找到并拼凑几个开源项目来实现这一点,例如 paho.mqtt.android client library and Mosquitto broker.
或者,考虑付费产品 Pushy (https://pushy.me/),它通过微调的 MQTT 套接字提供可靠的推送通知。 SDK 包括对近期 Android OS 电池优化的支持。
完全公开 - 我创立了 Pushy。
您可能需要在您的客户端上使用 Oksocket,也许可以解决问题。
你的问题在中国很常见,因为FCM/GCM在这个国家是被禁止的。国内开发的应用使用OkSocket通信库,基于OkSocket提供的TCP/IP传输协议实现Notification、Alert或RPC。
https://github.com/xuuhaoo/OkSocket 这是 Github 中的图书馆。
我是 Android 编程的新手,投入了大量时间阅读和测试有关服务和推送通知的所有内容。我要求我的应用程序为用户提供 可靠 (就交付时间而言,不到一分钟)通知。为此我有一些问题,我仍然没有找到答案:
FirebaseCloudMessaging (FCM) 是否仍然 "unreliable"。参考 2014 年的这一声明,Google 的连接刷新率是每 15 分钟一次 wifi 和每 28 分钟一次移动连接 https://productforums.google.com/forum/#!msg/nexus/fslYqYrULto/lU2D3Qe1mugJ。现在还是这样吗? Firebase 有比 GCM 更可靠的连接管理吗?我知道这并不意味着通知仅在这段时间之后才推送,但是当必须将警告或错误消息推送给用户时,连接失败并仅在 15 分钟后重新建立的可能性不适合我的用例。
为 Android 创建服务的最佳方法是什么,它保持与服务器的连接并侦听消息。我的问题是,(尤其是 API-Level 23 /Android 6.0 及其激进的电源管理)每个服务几乎立即暂停或停止。即使是在一小时后以某种方式释放的唤醒锁也不可靠。是的,我可以尝试合并所有方法来重新激活 Phone 或应用程序(计时器、警报、延迟处理程序、唤醒锁,...)以保持连接,但所有这些仍然有可能失败我的警告没有发出。我在这里遗漏了什么吗?
是否可以为不太可能被系统杀死的非 root 设备创建守护进程?是否可以创建类似看门狗的东西来观察服务及其状态,并在必要时重新启动它?
Facebook 或 Whatsapp 等大型应用程序如何实现这一点? Facebook 还在使用 MQTT 吗?
是否有实现此类服务的开源项目?
1) 通过 GCM / FCM 发送的通知仍然非常不可靠,不适合实时、关键任务交付。心跳间隔自 2014 年以来略有下降,但 WhatsApp 和 Facebook 等流行应用程序仍在使用自己的推送通知解决方案,使用 XMPP 和 MQTT 协议实现。这一定意味着 FCM 对于关键任务交付还不够可靠。
2) 在最近的 Android 版本中处理最近的节能优化在维护推送通知的后台连接方面变得越来越困难。打瞌睡模式会终止您服务的网络连接,后台执行限制会在您的应用进入后台时终止您的服务。
3) foreground service comes to mind, but this will require your app to display a non-cancelable notification while the service is running. The system will not terminate your foreground service as long as it is running, but the obvious drawback is that your app must display this notification which the user will probably find annoying. Otherwise, try using the JobScheduler APIs 使您的服务适应新的电池优化功能。
4) 如前所述,WhatsApp 仍然使用 XMPP,而 Facebook Messenger 仍然使用 MQTT。
5) 您也许可以找到并拼凑几个开源项目来实现这一点,例如 paho.mqtt.android client library and Mosquitto broker.
或者,考虑付费产品 Pushy (https://pushy.me/),它通过微调的 MQTT 套接字提供可靠的推送通知。 SDK 包括对近期 Android OS 电池优化的支持。
完全公开 - 我创立了 Pushy。
您可能需要在您的客户端上使用 Oksocket,也许可以解决问题。
你的问题在中国很常见,因为FCM/GCM在这个国家是被禁止的。国内开发的应用使用OkSocket通信库,基于OkSocket提供的TCP/IP传输协议实现Notification、Alert或RPC。
https://github.com/xuuhaoo/OkSocket 这是 Github 中的图书馆。