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

FirebaseMessaging.token的addOnSuccessListener在三星设备未触发求助

Firebase Messaging获取Token在三星部分设备(如A52)失效排查

问题场景

登录成功后调用以下代码获取Firebase推送Token,在三星A52等设备上无日志输出(Timber.d("test firebaseMessaging.token")未打印),相关代码及依赖配置如下:

核心代码

package com.google.firebase.messaging;

override suspend fun updatePushMessageToken() {
    firebaseMessaging.token.addOnSuccessListener {
        Timber.d("test firebaseMessaging.token")
        externalScope.launch {
            updatePushMessageToken(it)
        }
    }
}

Gradle依赖

implementation("com.google.firebase:firebase-messaging")

排查方向

  • 确认Firebase初始化状态:三星部分设备可能因后台限制导致Firebase初始化延迟,需在Application类中显式调用FirebaseApp.initializeApp(this),并验证初始化是否成功。
  • 补充失败监听逻辑:当前仅监听成功回调,未处理失败场景,添加addOnFailureListener捕获异常并打印错误信息,示例:
    firebaseMessaging.token
        .addOnSuccessListener { /* 原有逻辑 */ }
        .addOnFailureListener { e ->
            Timber.e(e, "获取Firebase Token失败")
        }
    
  • 检查设备权限与系统限制:
    • Android 13+需确保App已获取POST_NOTIFICATIONS权限,三星设备可能默认关闭该权限,需引导用户开启。
    • 将App从三星设备的电池优化列表中移除,避免后台进程被系统杀死导致Token请求中断。
    • 检查三星自带的智能管理器或安全管家,确认App未被限制后台活动、推送权限。
  • 核查依赖版本兼容性:指定Firebase Messaging的具体版本(如23.2.1),避免依赖版本漂移引发兼容性问题,同时确保设备上的Google Play服务为最新版本。
  • 优化协程逻辑:在suspend函数中使用await()替代回调,简化线程调度逻辑,示例:
    override suspend fun updatePushMessageToken() {
        try {
            val token = firebaseMessaging.token.await()
            Timber.d("test firebaseMessaging.token: $token")
            updatePushMessageToken(token)
        } catch (e: Exception) {
            Timber.e(e, "获取Token失败")
        }
    }
    
    需引入kotlinx-coroutines-play-services依赖以支持await()扩展方法。
  • 验证Firebase配置正确性:确认google-services.json文件的包名、SHA-1/SHA-256指纹与三星设备安装的App完全匹配,避免因配置不匹配导致Token请求被拒绝。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:41:10