Android 12(API Level 31)下Unity应用无法接收推送通知求助
解决Unity升级Android API Level 31后推送通知失效问题
检查AndroidManifest关键配置
- 别只盯着Messaging Activity,所有和推送相关的组件(比如自定义通知接收器、Firebase的服务子类)都得显式加
android:exported属性,根据组件是否需要接收外部调用设为true或false。比如你的FirebaseMessagingService子类,必须加上android:exported="true"。 - API31+强制要求用通知渠道才能显示通知,检查Unity代码里有没有正确调用
NotificationManager.CreateNotificationChannel,渠道的ID、名称、重要性设置得准确,不然通知根本出不来。
核对Firebase集成细节
- 确认
google-services.json是最新的,而且包名和Unity里设置的Android包名完全一致,API31对这个匹配的校验更严,差一点都不行。 - 你更新了Firebase SDK,但得确保是适配API31及以上的最新稳定版,同时检查Unity的Android Build Support组件版本也跟上,别出现SDK和Unity组件版本不兼容的情况。
排查系统权限与后台限制
- API31+对后台启动管得更严,去设备的应用权限里看看:通知权限开了没?后台活动权限有没有被禁用?这些都可能导致收不到推送。
- 如果是静默推送(不弹通知栏的那种),给
FirebaseMessagingService的OnMessageReceived方法加日志,看看是不是根本没触发这个方法,定位是接收问题还是处理问题。
分场景测试推送
- 分别测前台和后台的推送情况,API31+前后台的推送处理逻辑有差异,说不定只是后台收不到,前台正常。
- 用Firebase控制台发测试推送,同时开Logcat过滤
FirebaseMessaging、Notification相关关键词,看有没有错误日志,比如权限不足、渠道不存在这些提示,一查一个准。
检查Unity打包配置
- 去Unity的Player Settings里确认:Minimum API Level和Target API Level都设成31或更高,而且Custom Main Manifest确实引用了你修改过的AndroidManifest文件,别白改了配置没生效。
- 打包后可以去Temp/gradleOut路径下的生成版AndroidManifest.xml里看看,你加的
exported属性有没有被Unity自动覆盖,要是被覆盖了,得调整打包的配置规则。
内容的提问来源于stack exchange,提问作者Aman
相关产品推荐
相关产品推荐

