安卓推送通知使用服务还是应用程序?

3
我有一个应用程序,可以在iPhone和Android设备上运行。我还有一个服务器,用于在客户端之间传输文件和其他数据。现在,我的问题是关于Android客户端的。

目前,我有一个在后台运行并处理与服务器之间输入和输出的服务。当从服务器接收到新数据时,客户端会向用户发出通知。

因此,如果用户进入他的设备设置并强制关闭应用程序,则服务停止运行,数据将无法接收(与服务器的套接字将关闭,服务器将不会向其发送任何数据,并将其存储在数据库中,以供用户下次启动应用程序并连接时使用)。

所以这是一种方法,但另一种方法是Push Notification,即使整个应用程序包括服务都关闭,也会启动通知。但是,我认为缺点是我需要在我的应用程序中使用第三方组件,这会增加复杂性。

我需要帮助决定是否要使用Push Notification,以及这个功能在其他Android应用程序中有多普遍?

1个回答

5
据我理解,您的服务始终运行并具有始终连接到您的服务器的套接字连接。这会消耗巨大的电池电量,并可能已经给您的应用程序带来了许多不必要的复杂性。
您所说的第三方组件是Google Play服务,由创建Android操作系统的同一团队(即Google)开发和维护。
您所谈到的“额外复杂性”是在AndroidManifest.xml上添加一些权限和BroadcastReceiver,并在GCM Web面板上注册您的应用程序。所有详细信息都在此处描述 https://developer.android.com/google/gcm/client.html
大量应用程序都使用推送通知,例如Facebook,Facebook Messenger,Gmail,带有严重天气通知的天气应用程序,WhatsApp,Skype,Twitter以及几乎所有带有“What’s new”部分的应用程序。
因此,非常直接的回答是:
  • 您一定应该使用推送通知。

维护套接字会消耗大量电池吗?我不这么认为。您能解释一下这个套接字到底消耗了什么吗?read()是一个阻塞函数,而write()只有在客户端显式发送某些内容时才会发生,这将消耗与将其写入推送通知服务器相同的电量。此外,我注意到如果我强制停止WhatsApp,并从另一台设备向我发送消息,则不会推送任何通知,因此我认为他们不使用推送通知。 - izac89
消耗是在实际保持收音机运行状态时发生的(而不是待机或休眠)。我同意你的观点,这与推送通知服务器的消耗相同,只是GCM在性能、可靠性和电池消耗方面不断得到改进和优化,由创建整个操作系统的人共享,并在安装在系统上的所有其他应用程序中使用。想象一下有20个应用程序,每个应用程序都有20个不同的连接,或者有一个集中的资源来维护1个连接,并在需要时将数据重新分配给这20个应用程序。 - Budius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接