如何在.NET MAUI中使用Firebase通知?
在.NET MAUI中集成Firebase推送通知的完整步骤
1. 准备Firebase项目
- 登录Firebase控制台,创建新项目(已有项目可直接复用)
- 分别添加Android和iOS应用:
- Android:输入与MAUI项目一致的包名,下载
google-services.json,放到MAUI项目的Platforms/Android目录下,右键设置Build Action为GoogleServicesJson - iOS:输入与MAUI项目一致的Bundle ID,下载
GoogleService-Info.plist,放到MAUI项目的Platforms/iOS目录下,右键设置Build Action为BundleResource
- Android:输入与MAUI项目一致的包名,下载
2. 安装NuGet依赖
在MAUI项目中安装以下两个NuGet包:
Plugin.Firebase.Core:Firebase核心功能封装Plugin.Firebase.Messaging:推送通知相关功能
3. 平台配置
Android平台
- 权限配置:在
Platforms/Android/AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <!-- Android 13+ 必需 -->
- 初始化Firebase:修改
Platforms/Android/MainApplication.cs的OnCreate方法:
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); CrossFirebase.Initialize(this); }
- 自定义消息服务:创建
MyFirebaseMessagingService.cs继承自FirebaseMessagingService,重写关键方法:
[Service] [IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })] public class MyFirebaseMessagingService : FirebaseMessagingService { public override void OnNewToken(string token) { // 令牌更新时,将新令牌上传到你的业务服务器 base.OnNewToken(token); } public override void OnMessageReceived(RemoteMessage message) { // 处理后台/应用杀死状态下收到的消息 base.OnMessageReceived(message); } }
iOS平台
- 启用推送能力:在Xcode中打开MAUI的iOS项目,进入
Signing & Capabilities,添加:Push NotificationsBackground Modes并勾选Remote notifications
- 初始化Firebase:修改
Platforms/iOS/AppDelegate.cs的FinishedLaunching方法:
public override bool FinishedLaunching(UIApplication app, NSDictionary options) { CrossFirebase.Initialize(); // 请求推送权限 UNUserNotificationCenter.Current.RequestAuthorizationAsync(UNAuthorizationOptions.Alert | UNAuthorizationOptions.Badge | UNAuthorizationOptions.Sound); // 注册远程通知 UIApplication.SharedApplication.RegisterForRemoteNotifications(); return base.FinishedLaunching(app, options); }
- 获取设备令牌:在
AppDelegate.cs中实现令牌回调:
public override void DidRegisterForRemoteNotificationsWithDeviceToken(UIApplication application, NSData deviceToken) { CrossFirebaseMessaging.Current.SetApnsToken(deviceToken, ApnsTokenType.Sandbox); // 发布环境改为Production base.DidRegisterForRemoteNotificationsWithDeviceToken(application, deviceToken); }
4. 共享代码层处理通知
在MAUI的共享代码中(比如MainPage.xaml.cs),监听消息事件并处理:
protected override async void OnAppearing() { base.OnAppearing(); // 获取当前设备令牌 var token = await CrossFirebaseMessaging.Current.GetTokenAsync(); // 将令牌上传到业务服务器 // 监听前台消息 CrossFirebaseMessaging.Current.MessageReceived += (sender, e) => { // 前台收到消息时,手动触发本地通知(Firebase前台默认不弹出系统通知) var notificationManager = DependencyService.Get<INotificationManager>(); notificationManager.ShowNotification(e.RemoteMessage.GetNotification().Title, e.RemoteMessage.GetNotification().Body); }; }
注:本地通知需自行实现跨平台服务,或使用Plugin.LocalNotification等第三方库
5. 发送测试通知
控制台发送
在Firebase控制台的Cloud Messaging模块,点击Send your first message:
- 输入通知标题和内容
- 选择测试设备(通过令牌指定)或主题
- 点击发送,验证设备接收情况
服务器端发送(C#示例)
使用FirebaseAdmin库在服务器端发送通知:
// 初始化Admin SDK FirebaseApp.Create(new AppOptions() { Credential = GoogleCredential.FromFile("service-account-key.json"), }); // 构建消息 var message = new Message() { Token = "目标设备令牌", Notification = new Notification() { Title = "测试通知", Body = "这是一条来自Firebase的测试推送" } }; // 发送消息 string response = await FirebaseMessaging.DefaultInstance.SendAsync(message);
常见注意事项
- Android 13+需要动态请求
POST_NOTIFICATIONS权限,可在启动时调用Permissions.RequestAsync<Permissions.PostNotifications>() - iOS推送分Sandbox(测试)和Production(发布)环境,打包时需对应设置
- 设备令牌可能过期或变化,务必监听
OnNewToken事件并同步更新服务器数据
内容的提问来源于stack exchange,提问作者yousef sayed
相关产品推荐
相关产品推荐

