MAUI不原生支持Firebase,需通过平台特定项目分别接入FCM(Android)和APNs(iOS),再用依赖服务统一桥接通知逻辑;Android配FCM需Manifest权限、FirebasePushService及google-services.json,iOS则走原生APNs并由后端中转。

MAUI 本身不原生支持 Firebase,因为它不是 Xamarin.Forms 那种通过插件生态深度适配的框架。但你可以通过平台特定项目(Android/iOS)分别接入 Firebase FCM(Android)和 APNs(iOS),再用 MAUI 的依赖服务或消息中心统一桥接通知逻辑。关键不是“MAUI 直接集成 Firebase”,而是“在 MAUI 项目中按平台接入 Firebase 并统一处理”。
Android 端配置 FCM
这是最直接的一环,因为 Firebase 官方提供 Android SDK,且与 MAUI 的 Android 项目完全兼容:
- 在 Platforms/Android 项目中,打开
AndroidManifest.xml,添加必要权限和服务声明:
android:exported="false">
- 新建
FirebasePushService.cs继承FirebaseMessagingService,重写OnMessageReceived和OnNewToken;在OnNewToken中获取 token 并通过 MAUI 的MainThread.InvokeOnMainThreadAsync通知共享层 - 确保
google-services.json已复制到 Platforms/Android 根目录,并在csproj中设为GoogleServicesJson类型:
iOS 端配置 APNs(替代 Firebase 的推送通道)
iOS 不允许 Firebase SDK 直接处理通知(尤其后台静默推送受限),所以必须走原生 APNs 流程,Firebase 只能作为服务器端中转:
- 在 Platforms/iOS 中启用 Push Notifications 能力(Xcode → Signing & Capabilities → + Capability → Push Notifications)
- 在
AppDelegate.cs或Program.cs初始化时请求通知授权,并注册 device token:
UNUserNotificationCenter.Current.RequestAuthorization(authOptions, (granted, error) => {
if (granted)
UIApplication.SharedApplication.RegisterForRemoteNotifications();
});
- 实现
RegisteredForRemoteNotifications回调,将deviceToken转为字符串并传给 MAUI 共享层(例如通过IPlatformNotifyService接口) - 注意:iOS 上 Firebase 控制台无法直接向 MAUI App 发送通知,需你自己的后端用 APNs 密钥(.p8)或 Token-Based Authentication 向 Apple 推送网关发请求
MAUI 共享层统一收口
定义一个跨平台接口,让各平台实现自己的 token 上报与通知接收逻辑:
- 创建
INotificationService.cs:
{
Task InitializeAsync();
Task
event EventHandler
}
- 在
MauiProgram.cs中注册:
- Android/iOS 分别实现该接口,内部调用各自原生 token 获取与监听逻辑
- 在页面中注入并监听:
notificationService.NotificationReceived += OnPushReceived;
注意事项与避坑点
- Firebase 控制台测试推送仅对标准 Android App 有效;MAUI 项目需确保包名、SHA-1 证书指纹、google-services.json 三者严格匹配
- iOS 模拟器不支持 APNs,真机调试是必须的;Ad Hoc 或 App Store 分发时需用 Production APNs 证书
- MAUI 1.0+ 支持
AppHostBuilder生命周期,建议在OnResume或OnForeground中重新绑定通知监听,避免冷启动丢失事件 - 不要试图在共享层直接引用
Firebase.MessagingNuGet 包——它不兼容 MAUI,只适用于传统 Xamarin.Android 项目
基本上就这些。核心思路是“平台归平台,逻辑归共享”,不强求 Firebase 全链路 MAUI 化,而是务实拆解、分段对接。










