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<ipushregistrationservice androidpushregistrationservice>()</ipushregistrationservice>(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% 的重复工作。
