FCM 版本:21.0.0 :
我使用 FirebaseInstanceId 和 FirebaseOptionsBuilder 来接收项目 SDK 端的通知。
当前文档说 仍在使用已弃用的实例 ID API 进行令牌管理的应用程序应更新所有令牌逻辑以使用此处
描述的 FCM API因此,迁移到 24.0.1 后,我的项目似乎需要 google-service.json 来接收云消息传递。我的问题是,如果我们可以从服务器获取详细信息并按照以前的版本进行如下设置,为什么我们必须添加此 google-services.json 文件。
val options = FirebaseOptions.Builder()
.setGcmSenderId(firebaseConfig!!.GcmSenderId)
.setApiKey(firebaseConfig.ApiKey)
.setApplicationId(firebaseConfig.ApplicationId)
.setStorageBucket(firebaseConfig.StorageBucket)
.setProjectId(firebaseConfig.ProjectId)
.setDatabaseUrl(firebaseConfig.DatabaseUrl)
.build()
FirebaseApp.initializeApp(context, options, "SDK")
FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
if (!task.isSuccessful) {
Log.w("Test", "Fetching FCM registration token failed", task.exception)
return@OnCompleteListener
}
val token = task.result
Log.d("Test", token)
})
一旦我进行任何更改或删除 json 文件,项目就会崩溃。我已经看到并阅读了之前的线程 1 2 3,建议将 google-service.json 文件放在客户端并从那里管理它,但我想知道为什么我不能使用我的以前使用 FirebaseOptions Builder 的方法或者是否有任何其他可能的方法来管理 SDK 部分的通知。另外,恢复到旧版本并保持其以相同方式运行是个好主意吗?
解决方案
以下代码是在没有
google-service.json
文件的情况下设置 Firebase Cloud 消息传递的替代方法。
val options = FirebaseOptions.Builder()
.setGcmSenderId(firebaseConfig!!.GcmSenderId)
.setApiKey(firebaseConfig.ApiKey)
.setApplicationId(firebaseConfig.ApplicationId)
.setStorageBucket(firebaseConfig.StorageBucket)
.setProjectId(firebaseConfig.ProjectId)
.setDatabaseUrl(firebaseConfig.DatabaseUrl)
.build()
val app: FirebaseApp? = try {
// Attempt to get the existing FirebaseApp instance
FirebaseApp.getInstance("SDK")
} catch (e: IllegalStateException) {
// If it doesn't exist, initialize it
FirebaseApp.initializeApp(context, options, "SDK")
}
val firebaseMessaging = app?.get(FirebaseMessaging::class.java) as FirebaseMessaging
firebaseMessaging.token.addOnCompleteListener(OnCompleteListener { task ->
if (!task.isSuccessful) {
Log.w("LOG", "Fetching FCM registration token failed", task.exception)
return@OnCompleteListener
}
// Get new FCM registration token
val token = task.result
Log.d("LOG", token)
})