推送服务(Push Notification)
通过第三方平台(如Firebase Cloud Messaging, FCM)建立长连接通道,服务器可主动向安卓设备发送消息。
FirebaseMessagingService
接收并处理消息。 // 安卓端接收FCM消息示例 public class MyFirebaseMessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { if (remoteMessage.getData().size() > 0) { String message = remoteMessage.getData().get("key"); // 处理消息逻辑 } } }
自定义长连接方案
若需更高自主性,可采用以下技术:
方案 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
FCM | 通用推送 | 免费、省电、谷歌官方支持 | 依赖谷歌服务(国内需适配) |
WebSocket | 实时双向通信 | 低延迟、全双工 | 需维护连接稳定性 |
MQTT | IoT/弱网络环境 | 低功耗、支持QoS消息分级 | 需自建Broker服务器 |
数据传输加密
身份验证机制
权限控制
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
配置Firebase项目
google-services.json
文件。 服务器端发送消息
# Python示例(使用requests库) import requests url = "https://fcm.googleapis.com/fcm/send" headers = { "Authorization": "key=YOUR_SERVER_KEY", "Content-Type": "application/json" } data = { "to": "DEVICE_TOKEN", "data": {"title": "新消息", "content": "这是一条测试通知"} } response = requests.post(url, headers=headers, json=data)
安卓端处理消息
FirebaseMessagingService
,重写onMessageReceived
方法。 priority
字段为high
,确保关键通知及时送达。 问题 | 原因 | 解决方案 |
---|---|---|
消息延迟 | 设备网络不稳定/Doze模式 | 使用FCM的高优先级消息 |
国内设备无法接收FCM | 缺少谷歌服务框架 | 接入厂商推送(如华为、小米) |
后台服务被系统终止 | 安卓电源管理限制 | 使用WorkManager调度任务 |