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

Unity集成Android原生FCM插件异常:双图标、无推送及通道崩溃问题

踩坑指南:Unity集成Android原生FCM的多问题解决办法

刚看完你的问题,这几个坑我之前做Unity+FCM集成的时候也踩过,咱们一步步拆解解决:

一、先搞定双图标+Activity启动异常问题

你说装完APK有两个图标,一个触发onCreate一个不触发,这绝对是AndroidManifest里注册了两个带启动类别的Activity导致的——Unity自动生成的MainActivity是默认启动项,而FCM插件里的某个Activity(比如处理通知点击的页面)被错误加了LAUNCHER类别,系统就会把它当成另一个启动入口。

修复起来很简单:

  • 打开Unity项目里Plugins/Android目录下的AndroidManifest.xml(没有的话就新建一个)
  • 挨个检查所有<activity>标签的<intent-filter>:
    • 只留Unity的MainActivity保留以下启动配置:
      <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
      
    • 把FCM相关Activity里的android.intent.category.LAUNCHER删掉,只保留它需要的过滤规则(比如处理通知点击的自定义action或者VIEW动作)。

改完重新打包,双图标就会消失,点击唯一的图标也能正常触发onCreate了——你日志里的Channel is unrecoverably broken错误,很大概率就是双图标导致的Activity栈混乱、窗口通道崩溃,这个问题解决后,日志异常也会缓解。

二、解决FCM收不到推送+日志看不到的问题

先看你贴的日志,除了通道崩溃,还有个LocationManager的错误,这个暂时不用管,先聚焦FCM的核心问题:

1. 核对FCM基础配置

  • 确认google-services.json已经放在Plugins/Android目录,而且包名和Firebase控制台的项目完全匹配,别打错字母!
  • 如果是用原生FCM插件,一定要在AndroidManifest里正确注册FirebaseMessagingService:
    <service
        android:name="你的包名.MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    
    要是用Firebase官方Unity SDK,记得检查插件版本和Unity版本兼容,别用太老的SDK。

2. 处理Android 8.0+的通知通道要求

Android 8.0之后必须创建通知通道才能显示推送,不然就算收到了也看不到。在你的MyFirebaseMessagingService里加这段代码:

private void createNotificationChannel() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel channel = new NotificationChannel("test_channel",
                "测试推送通道",
                NotificationManager.IMPORTANCE_DEFAULT);
        channel.setDescription("接收FCM推送的通道");
        NotificationManager notificationManager = getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
    }
}

记得在onCreate里调用这个方法。

3. 把FCM日志调出来

之前看不到Firebase日志?打开Android Studio的Logcat,直接过滤关键词:

  • 搜FirebaseMessaging,看推送是否成功到达设备
  • 搜你的MyFirebaseMessagingService类名,看服务有没有正常处理推送
  • 也可以在Unity里用Debug.Log,同时在Android原生代码里用Log.d("FCM_TEST", "日志内容"),这样两边的日志都能在Logcat里看到,方便排查。

4. 检查权限和启动模式

  • AndroidManifest里别忘了加必要权限:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    
  • 把Unity的MainActivity启动模式设为singleTop或者singleTask,避免重复创建实例,减少通道崩溃的概率:
    <activity android:name="com.gcm.test.MainActivity"
              android:launchMode="singleTop"
              ...>
    

三、最后验证步骤

  1. 重新打包APK,确认只有一个图标,点击能正常进入应用,onCreate正常触发
  2. 用Firebase控制台发测试推送,目标选你的包名,或者直接用设备Token推送
  3. 检查Logcat里的FCM日志,看有没有收到推送的记录;同时看手机通知栏有没有显示推送

内容的提问来源于stack exchange,提问作者Bonifacius

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:10:23