You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.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

2. 安装NuGet依赖

在MAUI项目中安装以下两个NuGet包:

  • Plugin.Firebase.Core:Firebase核心功能封装
  • Plugin.Firebase.Messaging:推送通知相关功能

3. 平台配置

Android平台

  1. 权限配置:在Platforms/Android/AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <!-- Android 13+ 必需 -->
  1. 初始化Firebase:修改Platforms/Android/MainApplication.cs的OnCreate方法:
protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    CrossFirebase.Initialize(this);
}
  1. 自定义消息服务:创建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平台

  1. 启用推送能力:在Xcode中打开MAUI的iOS项目,进入Signing & Capabilities,添加:
    • Push Notifications
    • Background Modes并勾选Remote notifications
  2. 初始化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);
}
  1. 获取设备令牌:在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:35:16