android - 带网络连接的 Android 后台服务
问题描述
目标
创建一个有网络连接的长时间运行的后台服务,类似于Zello应用程序。
问题
从 API 级别 26 (Oreo) 开始,对后台服务及其网络活动有严格的限制。
看看 Zello 应用程序,它有一个持续运行的后台服务,即使设备处于睡眠状态也能够接受音频和文本消息,我想知道他们是如何做到的?他们的服务没有在前台运行。此外,看起来他们并没有为此使用推送消息,因为该应用程序在推送消息接收出现问题的情况下(例如低端小米手机)工作得相当稳定。
任何想法,将不胜感激。
解决方案
根据我收集的这些应用程序使用 Firebase Cloud 消息服务: https ://firebase.google.com/docs/cloud-messaging/
Firebase 服务嵌入在 Android 系统中,并与 Firebase 服务器保持持续的网络连接。然后,这些应用程序会联系 firebase 服务器,后者又会通知目标设备。
优点:
- Android 系统负责保持服务器连接处于活动状态并运行
- 网络负载被最小化,因为一个连接用于所有使用 firebase 服务的应用程序。
缺点:
- 所有数据都通过 firebase 服务器发送,因此(理论上)Google 可以直接访问
- 根据使用您的应用程序的设备数量,您需要为服务付费。
提出的类似问题也可能有助于解决该问题: 推送通知技术如何在 Android 上工作?
推荐阅读
- java - 我的 IDE 中是否存在错误 - 无法在控制台中输入值
- c# - 我有一个关于 Xamarin.Forms 导航的问题。如何将变量值从一页传递到另一页?
- mysql - 为什么不能在 SQL 中直接比较 Salary < max(Salary)?
- reactjs - 将类添加到地图功能内的以下按钮
- sql - 如何在 Select-List 上使用列值作为列名或计算符号
- swift - 如何在不更改格式的情况下将字符串转换为日期
- ggplot2 - 更改 geom_tile 中的色阶
- sqlite - DbContext.EnsureCreated() : ArgumentNullException 仅在 RELEASE 构建时
- apache - 修改certbot手动创建的证书
- fusionauth - 在成功的密码重置用户停留在成功状态页面