Kotlin中获取Firebase Cloud Messaging Android设备令牌异常求助
问题原因及解决方法
你调用的FirebaseInstallations.getInstance().id获取的是Firebase安装ID,并非FCM推送所需的设备令牌,这就是你拿到短字符串且无法接收通知的核心原因。
正确获取FCM设备令牌的代码
使用FirebaseMessaging的API来获取令牌:
FirebaseMessaging.getInstance().token.addOnCompleteListener { task -> if (task.isSuccessful) { val fcmToken = task.result if (fcmToken != null && userID != null) { Log.d("FCM Token ---->>", fcmToken) // 将令牌保存到你的后端服务器 } else { Log.e("FCM Token", "令牌为空或用户ID未设置") } } else { Log.e("FCM Token", "获取失败", task.exception) } }
额外注意事项
- 确保项目已添加FCM依赖(在app模块的
build.gradle中):implementation 'com.google.firebase:firebase-messaging:23.4.1' // 建议使用最新版本 - 监听令牌更新:FCM令牌可能因应用重装、数据清除等场景变化,需通过自定义
FirebaseMessagingService监听:
并在class MyFirebaseMessagingService : FirebaseMessagingService() { override fun onNewToken(token: String) { super.onNewToken(token) // 更新新令牌到服务器 Log.d("New FCM Token", token) } }AndroidManifest.xml中注册该服务:<service android:name=".MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
内容的提问来源于stack exchange,提问作者Sam Chahine
相关产品推荐
相关产品推荐

