使用react-native-firebase v4.0.3时Android推送提示Unregistered registration token问题
解决react-native-firebase v4.0.3 Android端推送令牌"Unregistered registration token"问题
我来帮你排查这个Android端推送失败的问题,结合react-native-firebase v4.0.3的特性,我整理了几个高频踩坑点和解决步骤,你可以逐一验证:
一、先核对google-services.json的正确性
这是Android端Firebase配置的核心,很容易出错:
- 确认文件位置:必须放在
android/app/google-services.json,别放错到其他目录了。 - 包名完全匹配:下载这个文件时对应的Firebase Android应用包名,要和你项目
android/app/build.gradle里的applicationId完全一致,大小写、特殊字符都不能差。 - 核对项目信息:打开
google-services.json,检查project_number、firebase_url等字段是否和Firebase控制台里的项目信息对应,避免下载了其他项目的配置文件。
二、检查Gradle配置是否符合要求
react-native-firebase v4.0.3对Gradle版本有特定依赖,别随便升级:
- 根目录
android/build.gradle里的Google服务插件版本:dependencies { classpath 'com.google.gms:google-services:4.0.1' // 这个版本和v4.0.3兼容,别用更高版本 } - 应用模块
android/app/build.gradle末尾必须应用插件:apply plugin: 'com.google.gms.google-services' - 确认
compileSdkVersion和targetSdkVersion建议用26或27,过高版本可能导致兼容性问题。
三、验证AndroidManifest.xml的权限与服务配置
确保必要的组件和权限都已添加:
<!-- 基础权限 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <application ...> <!-- Firebase Messaging服务 --> <service android:name="io.invertase.firebase.messaging.RNFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> <!-- Instance ID服务(用于令牌刷新) --> <service android:name="io.invertase.firebase.messaging.RNFirebaseInstanceIdService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> </intent-filter> </service> </application>
四、调整令牌获取的时机
别在App刚启动就急着拿令牌,有时候还没初始化完成:
- 监听令牌刷新事件,确保拿到最新的有效令牌:
firebase.messaging().onTokenRefresh(() => { firebase.messaging().getToken().then((newToken) => { console.log('最新推送令牌:', newToken); // 这里更新你的令牌存储,确保后端用的是最新的 }); }); - 另外,Android 8.0+需要创建通知渠道(如果targetSdkVersion≥26),缺少渠道可能导致推送失败,间接提示令牌未注册:
import { Platform } from 'react-native'; if (Platform.OS === 'android') { const channel = new firebase.notifications.Android.Channel( 'default', '默认通知渠道', firebase.notifications.Android.Importance.Max ).setDescription('用于接收应用推送通知'); firebase.notifications().android.createChannel(channel); }
五、清理缓存与环境验证
- 清理Android项目缓存:执行
cd android && ./gradlew clean,然后重新打包安装,旧缓存可能导致配置不生效。 - 用真实设备测试:模拟器的Google Play服务可能有问题,尽量用带GMS服务的真实Android设备。
- 确认Firebase控制台的Cloud Messaging状态:检查对应Android应用的服务器密钥是否有效,有没有被禁用。
六、强制刷新令牌
如果以上都没问题,试试删除旧令牌再重新获取:
firebase.messaging().deleteToken().then(() => { firebase.messaging().getToken().then((freshToken) => { console.log('重新生成的令牌:', freshToken); // 用这个新令牌去Firebase控制台测试 }); });
内容的提问来源于stack exchange,提问作者Poptocrack
相关产品推荐
相关产品推荐

