You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase设备到设备通知接收不稳定及令牌变更问题技术问询

解决Firebase设备到设备通知接收不稳定的问题

从你的描述来看,令牌变更未同步到服务器确实是这类不稳定问题的核心诱因,我之前做类似功能时也踩过这个坑,给你整理一套可落地的排查和解决步骤:

1. 正确实现令牌变更监听服务

首先要确保你已经按Firebase要求实现了FirebaseMessagingService的子类,并重写onNewToken方法来捕获令牌变更(包括首次生成和后续更新):

class MyFirebaseMessagingService : FirebaseMessagingService() {
    override fun onNewToken(token: String) {
        super.onNewToken(token)
        // 这里必须调用你的后端API,将新令牌同步到服务器
        syncTokenToServer(token)
    }

    // 自定义同步逻辑示例(记得处理网络异常,加重试机制)
    private fun syncTokenToServer(token: String) {
        // 传入当前用户ID/设备唯一标识 + 新令牌到后端接口
        // 比如:ApiService.updateDeviceToken(userId, token)
    }
}

2. 清单文件的正确配置

一定要在AndroidManifest.xml中注册这个服务,并且添加正确的intent-filter,确保系统能触发令牌变更回调:

<service
    android:name=".MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

3. 服务器端的令牌管理优化

光同步新令牌还不够,还要处理旧令牌的失效,避免无效发送:

  • 每次同步新令牌时,服务器要将该用户/设备的旧令牌标记为无效,不要再用它发送通知
  • 建议在服务器端记录令牌的更新时间,定期清理长时间未更新的无效令牌
  • 发送通知后,捕获Firebase返回的错误(比如InvalidRegistration或NotRegistered),及时标记对应令牌为无效

4. 额外验证步骤

如果按上面配置后还有问题,可以做这些验证:

  • 手动触发令牌变更(比如卸载重装APP、清除应用数据),查看服务器是否能收到新令牌
  • 检查Firebase控制台的云消息发送日志,看是否存在大量无效令牌的发送错误
  • 测试不同网络环境(Wi-Fi/移动数据)下的通知接收情况,排除临时网络波动的影响

内容的提问来源于stack exchange,提问作者DsCpp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:27:10