能否仅在Unity iOS构建中禁用Firebase,同时保留Android端Firebase功能?
Unity iOS构建排除Firebase Messaging的可落地方案
- 插件配置修正
不要全量取消Firebase目录下所有插件的iOS适配权限,仅对Firebase Messaging专属的插件文件(包括Firebase.Messaging.dll、对应的iOS端.framework静态库文件)单独取消iOS平台勾选,保留其他无冲突的Firebase基础库,避免因依赖缺失触发构建报错。 - 自动清理Xcode构建产物
在Assets/Editor目录下新增后处理脚本,实现IPostProcessBuild接口,Xcode项目导出后自动执行以下操作:- 打开生成的Podfile,删除所有包含Firebase/Messaging、Firebase/Core的依赖声明行
- 自动调用
pod install --repo-update更新Pod依赖,无需手动修改Podfile
参考代码示例:
using UnityEditor; using UnityEditor.Callbacks; using System.IO; using System.Diagnostics; public class IOSBuildPostProcessor { [PostProcessBuild(1000)] public static void OnPostProcessBuild(BuildTarget target, string path) { if (target != BuildTarget.iOS) return; string podfilePath = Path.Combine(path, "Podfile"); string content = File.ReadAllText(podfilePath); // 移除所有Firebase相关依赖声明 content = System.Text.RegularExpressions.Regex.Replace(content, @"pod 'Firebase.*'\n", ""); File.WriteAllText(podfilePath, content); // 自动执行pod install更新依赖 Process proc = new Process(); proc.StartInfo.FileName = "/bin/bash"; proc.StartInfo.Arguments = $"-c \"cd {path} && pod install --repo-update\""; proc.Start(); proc.WaitForExit(); } } - 代码侧条件编译隔离
所有调用Firebase Messaging API的代码,全部用平台宏包裹,确保iOS构建时不会编译相关逻辑:#if UNITY_ANDROID && !UNITY_EDITOR // 所有Firebase Messaging初始化、注册、回调相关代码 #endif - 推送配置校验
移除Unity iOS Player Settings中所有和Firebase推送相关的配置项,直接按原生APNS的要求配置推送权限、推送证书即可,不会再出现FCM劫持推送的问题。
完成以上操作后,即可实现Android端正常使用Firebase Messaging,iOS端完全排除FCM相关代码、依赖,不会再出现启动崩溃问题,也无需维护两个独立项目。
内容的提问来源于stack exchange,提问作者Caleb V.
相关产品推荐
相关产品推荐

