不使用Firebase Cloud Messaging或任何其他类似服务的Android推送通知

时间:2018-09-03 07:25:48

标签: java android sockets server client

我正在出于学习目的而开发一个使用服务器-客户端体系结构的android聊天应用程序。我用Java编写了服务器端(因为我想学习),而客户端则是一个android应用程序。我正在使用TCP套接字进行通信。

当两个客户端都打开其应用程序并已连接时,一切工作都很好,但是我希望客户端A在客户端B尚未打开应用程序时仍能够向客户端B发送消息。 strong>

做完一些研究后,我意识到我需要使用 android上推通知,即使该应用未打开或运行,它也允许我的服务器与客户端(android应用)进行通信通过触发客户端意图。我进行了更多研究,发现的每个教程都使用第三方服务作为中间人来实现这一目标,例如Firebase Cloud Messaging,这违背了我尝试通过自己做事来学习的目的。

因为我出于学习目的而这样做我不想使用其中的任何服务,例如Firebase Cloud Messaging ,所以我想从我用Java编写的服务器上触发意图不用中间人。

这里的主要目标是在关闭应用程序时将消息从我的服务器发送到android应用程序,而无需使用任何第三方软件(例如Firebase Cloud Messaging)。

我不确定如何实现这一目标,如果有人能指出正确的方向,我将不胜感激。 谢谢!

2 个答案:

答案 0 :(得分:0)

我认为当应用程序在后台运行时,您可以启动服务并打开套接字,然后开始侦听新消息,当收到新消息时,您可以使用android sdk通知处理显示通知。

答案 1 :(得分:0)

除了我要说的sahand-zehtabchi之外,这样的服务应该最好在清单中使用android:process来使用它自己的进程,这样在主应用程序终止时我不会被杀死,并且应该实现为在获得<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />权限并重新启动并构建接收器之后,重新启动:

<receiver android:name="de.example.BootBroadcastReceiver">  
  <intent-filter>  
    <action android:name="android.intent.action.BOOT_COMPLETED" />  
  </intent-filter>  
</receiver>

但是,当然,这种非常粘滞的后台服务对于设备的电池和内存使用而言并不是一个很好的体系结构。如果可能的话,最好使用任何现有的Android系统服务。