Android 不使用 Firebase 云消息传递或任何其他类似服务的推送通知

Android Push Notifications Without using Firebase Cloud Messaging or any other similar service

我正在开发一个 android 用于学习目的的聊天应用程序,它使用服务器-客户端架构。我在 Java 中自己编写了服务器端(因为我正在努力学习),而客户端是一个 android 应用程序。我正在使用 TCP 套接字进行通信。

当两个客户端打开并连接他们的应用程序时一切正常,但我希望客户端 A 仍然能够向客户端 B 发送消息当客户端 B 没有应用程序时打开.

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

因为我这样做是为了学习目的我不想使用任何这些服务,例如 Firebase Cloud Messaging,我想自己从服务器触发 Intent我在 java 中写的,没有使用中间人。

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

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

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

除了 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 系统服务。