MAUI本身不支持推送通知,需结合各平台原生能力(Android的FCM、iOS的APNs)及后端服务(如OneSignal、Azure)实现;关键步骤包括平台配置、统一获取上报设备token、处理前后台通知,并推荐使用OneSignal等托管服务降低开发成本。

MAUI 本身不直接支持推送通知,因为它跨平台且没有内置的推送服务 SDK。真正实现推送需要结合各平台原生能力(Android 的 FCM、iOS 的 APNs)和后端推送服务(如 Firebase、Azure Notification Hubs、OneSignal 等)。下面分关键步骤讲清楚怎么在 MAUI 中落地推送通知。
1. 平台配置是前提(Android 和 iOS 必须做)
MAUI 应用要收推送,得先让每个平台能注册设备令牌(token),这是推送的“地址”。跳过这步,后面全白搭。
-
Android:在
Platforms/Android/MainActivity.cs的OnCreate中调用FirebaseMessaging.Instance.Token获取 FCM token;同时确保AndroidManifest.xml已声明网络权限、添加com.google.firebase.messaging.FirebaseMessagingService服务,并配置google-services.json(放在Platforms/Android下并设为GoogleServicesJson类型)。 -
iOS:在
Platforms/iOS/AppDelegate.cs的FinishedLaunching中调用UIApplication.SharedApplication.RegisterForRemoteNotifications();还需在 Apple Developer Portal 开启 Push Notifications Capability,并配置有效的推送证书或密钥(.p8 文件),Xcode 中也要开启 Background Modes → Remote notifications。
2. 在 MAUI 中统一获取并上报设备 Token
建议封装一个平台无关的接口,比如 IPushRegistrationService,在各平台实现具体逻辑,然后在启动时调用:
- Android 实现里监听
FirebaseMessaging.Instance.TokenRefresh事件,拿到 token 后通过依赖注入传给业务层或上传到你自己的后端。 - iOS 实现里重写
DidRegisterForRemoteNotifications和DidFailToRegisterForRemoteNotifications方法,解析NSData得到 device token 字符串(十六进制格式),同样上传。 - 别忘了在
MauiProgram.cs中注册该服务:builder.Services.AddSingleton(iOS 对应替换)。()
3. 处理前台/后台收到的通知
用户点击通知打开 App 时,需捕获参数;App 在前台时,系统默认不弹横幅(FCM 默认行为),需手动显示。
-
Android:在
FirebaseMessagingService子类中重写OnMessageReceived,判断 app 是否在前台(可用ActivityManager检查),前台时用NotificationCompat.Builder手动构建并发出通知。 -
iOS:实现
IUNUserNotificationCenterDelegate,在WillPresentNotification中返回UNNotificationPresentationOptions.Alert让前台也显示;在DidReceiveNotificationResponse中解析notification.Request.Content.UserInfo获取自定义数据(如跳转页面)。 - MAUI 层可通过
Application.Current.OnResume()或自定义消息事件(如WeakEventManager)把通知内容传递给 ViewModel 做后续处理(例如导航到详情页)。
4. 推荐用 OneSignal 或 Azure 这类托管服务
自己对接 FCM/APNs + 自建后端发推送门槛高、维护成本大。对大多数项目,直接集成 OneSignal 是最快方案:
- 安装
OneSignalSDK.Xamarin.iOS和OneSignalSDK.Xamarin.AndroidNuGet 包。 - Android:在
MainActivity.OnCreate调用OneSignal.Initialize("YOUR_APP_ID");iOS:在AppDelegate.FinishedLaunching初始化并设置委托。 - OneSignal 自动处理 token 获取、前台通知展示、点击回调,还提供 Web 控制台发测试推送,省去大量胶水代码。
基本上就这些。核心不是“MAUI 怎么推”,而是“MAUI 怎么桥接原生推送能力”。平台配置、token 上报、前后台通知处理三块缺一不可。用好 OneSignal 这类 SDK,能省下 80% 的重复工作。










