MAUI怎么集成Firebase MAUI Firebase配置方法

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:name="android.permission.INTERNET" />


  android:name=".FirebasePushService"
  android:exported="false">
  
    google.firebase.MESSAGING_EVENT" />
  

  • 新建 FirebasePushService.cs 继承 FirebaseMessagingService,重写 OnMessageReceivedOnNewToken;在 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.csProgram.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 GetTokenAsync();
  event EventHandler NotificationReceived;
}
  • MauiProgram.cs 中注册:
builder.Services.AddSingleton();
  • 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 生命周期,建议在 OnResumeOnForeground 中重新绑定通知监听,避免冷启动丢失事件
  • 不要试图在共享层直接引用 Firebase.Messaging NuGet 包——它不兼容 MAUI,只适用于传统 Xamarin.Android 项目

基本上就这些。核心思路是“平台归平台,逻辑归共享”,不强求 Firebase 全链路 MAUI 化,而是务实拆解、分段对接。