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动作)。
- 只留Unity的
改完重新打包,双图标就会消失,点击唯一的图标也能正常触发onCreate了——你日志里的Channel is unrecoverably broken错误,很大概率就是双图标导致的Activity栈混乱、窗口通道崩溃,这个问题解决后,日志异常也会缓解。
二、解决FCM收不到推送+日志看不到的问题
先看你贴的日志,除了通道崩溃,还有个LocationManager的错误,这个暂时不用管,先聚焦FCM的核心问题:
1. 核对FCM基础配置
- 确认
google-services.json已经放在Plugins/Android目录,而且包名和Firebase控制台的项目完全匹配,别打错字母! - 如果是用原生FCM插件,一定要在AndroidManifest里正确注册
FirebaseMessagingService:
要是用Firebase官方Unity SDK,记得检查插件版本和Unity版本兼容,别用太老的SDK。<service android:name="你的包名.MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
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" ...>
三、最后验证步骤
- 重新打包APK,确认只有一个图标,点击能正常进入应用,
onCreate正常触发 - 用Firebase控制台发测试推送,目标选你的包名,或者直接用设备Token推送
- 检查Logcat里的FCM日志,看有没有收到推送的记录;同时看手机通知栏有没有显示推送
内容的提问来源于stack exchange,提问作者Bonifacius
相关产品推荐
相关产品推荐

