[Messaging] getToken() hangs infinitely and onNewToken() is never called when using Firebase BOM 34.12.0 with androidx.datastore 1.3.0-alpha07

未关闭
#8,040 2 条评论 2 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
38/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
活跃
技术栈
android, firebase, kotlin
领域
mobile-dev

调研方向

使用 build.gradle.kts 中的版本和依赖项重现该问题,然后在 Firebase BOM 34.12.0 和 androidx.datastore 1.3.0-alpha07 下跟踪 FirebaseMessaging.getInstance().token 以及 MyFirebaseMessagingService.kt 的 onNewToken() 行为。与 Datastore 1.3.0-alpha06 或 Firebase BOM 33.16.0 进行比较;当 token 获取完成且在受影响的组合下调用 onNewToken() 时,即表示完成。

由索引模型根据 Issue 内容生成。

描述

api: messaging
[READ] Step 1: Are you in the right place?

Yes.

[REQUIRED] Step 2: Describe your environment
  • Android Studio version: Android Studio Panda 4 | 2025.3.4 RC 1
  • Firebase Component: firebase-messaging
  • Component version: Firebase BOM 34.12.0 (Bug also depends on androidx.datastore:1.3.0-alpha07)
[REQUIRED] Step 3: Describe the problem

I am using Firebase Cloud Messaging in my project, managed via the Firebase BOM. I also use androidx.datastore to store user preferences.

There seems to be a severe conflict or bug when combining recent versions of the Firebase BOM with the latest alpha version of Jetpack Datastore.

The Issue:

  1. FirebaseMessagingService().onNewToken() is never called, not even on a fresh installation of the app.
  2. When calling FirebaseMessaging.getInstance().getToken(), the task runs infinitely and never completes (neither succeeds nor fails).

Version specific behavior:

  • The bug occurs when using Firebase BOM 34.12.0 in combination with androidx.datastore 1.3.0-alpha07.
  • If I downgrade androidx.datastore to 1.3.0-alpha06, the issue disappears and FCM works correctly.
  • Alternatively, if I keep Datastore at 1.3.0-alpha07 but downgrade the Firebase BOM to 33.16.0, the issue also disappears.

This indicates a dependency clash between the newest Datastore alpha and the newest Firebase BOM, causing the FCM token generation/retrieval task to deadlock or silently fail.

The behavior can be reproduced in a fresh project.

Steps to reproduce:
  1. Create a project using Firebase BOM 34.12.0 and firebase-messaging.
  2. Add androidx.datastore:datastore-preferences:1.3.0-alpha07.
  3. Set up a basic FirebaseMessagingService.
  4. Install the app fresh. Notice that onNewToken() is missing.
  5. Attempt to fetch the token manually via FirebaseMessaging.getInstance().token. Notice that the listener is never triggered.
Relevant Code:

build.gradle.kts (Dependencies):

dependencies {
    // Firebase
    implementation(platform("com.google.firebase:firebase-bom:34.12.0"))
    implementation("com.google.firebase:firebase-messaging")

    // Datastore (Causes the FCM infinite hang with the BOM above)
    implementation("androidx.datastore:datastore-preferences:1.3.0-alpha07")
    // Note: Reverting to 1.3.0-alpha06 fixes the Firebase issue.
}

MyFirebaseMessagingService.kt:

import android.util.Log
import com.google.firebase.messaging.FirebaseMessagingService

class MyFirebaseMessagingService : FirebaseMessagingService() {

    override fun onNewToken(token: String) {
        super.onNewToken(token)
        // BUG: This is NEVER called on fresh install when using the dependency combination above.
        Log.d("FCM_TEST", "Refreshed token: $token")
    }
}

MainActivity.kt (Manual Token Fetching):

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.messaging.FirebaseMessaging

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        Log.d("FCM_TEST", "Fetching FCM token...")
        
        FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
            // BUG: This callback is NEVER reached. It hangs infinitely.
            if (!task.isSuccessful) {
                Log.w("FCM_TEST", "Fetching FCM registration token failed", task.exception)
                return@addOnCompleteListener
            }

            val token = task.result
            Log.d("FCM_TEST", "FCM Token: $token")
        }
    }
}
主要语言
Java
星标
2.6k
派生
733
平均合并
2 天 15 小时
30 天内合并 PR
72

环境准备

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

firebase/firebase-android-sdk 的其他 Issue

查看 firebase/firebase-android-sdk 的全部 Issue

相似的 Issue

更多 Java Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。