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">
google.firebase.MESSAGING_EVENT" />
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: varauthOptions = UNAuthorizationOptions.Alert | UNAuthorizationOptions.Sound | UNAuthorizationOptions.Badge;
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: public interface INotificationService
{
Task InitializeAsync();
Task
event EventHandler
}
MauiProgram.cs中注册: builder.Services.AddSingleton
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 化,而是务实拆解、分段对接。
