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未被限制后台活动、推送权限。
- Android 13+需确保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
相关产品推荐
相关产品推荐

