我对Android编程相对较新,并投入大量时间阅读和测试所有有关服务和推送通知的内容。我要求我的应用程序提供可靠(在一分钟内的交付时间)用户通知。为此我有一些问题,我仍然没有找到答案:
FirebaseCloudMessaging(FCM)仍然“不可靠”。参考2014年的这一声明,Google的连接刷新率为每15分钟一次wifi,并且每隔28分钟移动连接https://productforums.google.com/forum/#!msg/nexus/fslYqYrULto/lU2D3Qe1mugJ。这仍然是这样吗? Firebase的连接管理比GCM更可靠吗?我知道这并不意味着,通知仅在此时间之后被推送,但是当必须将警告或错误消息推送给用户时,管芯连接失败并且仅在15分钟后重新建立的可能性我的用例是不可接受的。
为Android创建服务的最佳方式是什么,该服务包含与服务器的连接并侦听消息。我的问题是,(特别是对于API级别23 / Android 6.0及其激进的电源管理)每个服务几乎立即暂停或停止。即使是一个Wake-Lock也不可靠,但在一小时后就会以某种方式释放。是的,我可以尝试合并所有方式来重新激活电话或应用程序(计时器,警报,延迟处理程序,唤醒锁,...)以保持连接,但仍有可能所有这些都失败,我的警告是没送到。我在这里错过了什么吗?
是否可以为非根设备创建一个不太可能被系统杀死的设备?是否有可能创建像看门狗一样的东西,观察服务及其状态,并在必要时重新启动它?
如何通过Facebook或Whatsapp等大型应用实现这一目标? Facebook仍在使用MQTT吗?
是否有任何实施此类服务的OpenSource项目?
答案 0 :(得分:1)
1)通过GCM / FCM发送的通知仍然非常不可靠,也不适合实时,关键任务交付。自2014年以来,心跳间隔已略有减少,但是诸如WhatsApp和Facebook之类的流行应用仍然使用自己的推送通知解决方案,该解决方案是通过XMPP和MQTT协议实现的。这必须意味着FCM对于关键任务交付还不够可靠。
2)在维护推送通知的后台连接方面,处理最近的Android版本中的最新节能优化变得越来越困难。休眠模式将终止服务的网络连接,并且当应用程序进入后台时,后台执行限制将终止您的服务。
3)想到一个foreground service,但这将要求您的应用在服务运行时显示不可取消的通知。只要运行,系统就不会终止您的前台服务,但是明显的缺点是您的应用程序必须显示此通知,用户可能会发现它很烦人。否则,请尝试使用JobScheduler APIs使您的服务适应新的电池优化功能。
4)如前所述,WhatsApp仍使用XMPP,Facebook Messenger仍使用MQTT。
5)您可能可以找到几个开源项目并将它们组合在一起,例如paho.mqtt.android客户端库和Mosquitto broker。
或者,考虑一种付费产品Pushy(https://pushy.me/),该产品通过微调的MQTT套接字提供可靠的推送通知。该SDK支持最新的Android OS电池优化。
全面披露-我创立了Pushy。
答案 1 :(得分:0)
您可能需要在客户端上使用Oksocket并可能解决问题。
您的问题在中国很常见,因为该国家禁止FCM / GCM。在中国开发的应用程序使用OkSocket通信库,并基于OkSocket提供的TCP / IP传输协议实现Notification,Alert或RPC。
https://github.com/xuuhaoo/OkSocket,这是Github中的库。