You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:26:17