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

如何从同解决方案的后端服务器向Blazor Maui应用发送推送通知?

Blazor MAUI 推送通知端到端实现指南

先理清楚完整流程

你需要的是一套「客户端注册令牌→服务器存储令牌→服务器批量发通知→客户端接收展示」的闭环链路:

  • Blazor MAUI 客户端启动后,向苹果APNs或谷歌FCM申请设备专属令牌,将令牌同步到你的服务器存储
  • 服务器GUI输入标题和内容后,调用对应推送服务商接口,给所有存储的令牌发送通知
  • 客户端收到推送后,触发系统原生通知,也可同步到Blazor页面展示

客户端(Blazor MAUI)补充配置

你已完成基础推送配置,现在补充两个关键步骤:

  1. 上传令牌到服务器
    在获取到推送令牌的逻辑后,新增HTTP请求将令牌同步到服务器:
    // 假设已从FCM/APNs获取到token字符串
    using var httpClient = new HttpClient();
    await httpClient.PostAsJsonAsync("https://你的服务器地址/api/device-tokens", 
        new { Token = token, Platform = DeviceInfo.Platform.ToString() });
    
    注意:监听令牌刷新事件(苹果/谷歌令牌可能会变更),变更后立即重新上传。
  2. 通知接收与前端同步
    MAUI原生层可直接触发系统通知,若要在Blazor页面同步展示,通过IJSRuntime传递内容:
    // 原生通知回调逻辑中
    await MainThread.InvokeOnMainThreadAsync(async () =>
    {
        var jsRuntime = await ServiceProvider.GetRequiredService<IJSRuntime>();
        await jsRuntime.InvokeVoidAsync("showPageNotification", title, message);
    });
    
    在Blazor的wwwroot/index.html中添加前端提示方法:
    function showPageNotification(title, msg) {
        // 可自定义页面内通知组件,这里用alert做示例
        alert(`${title}: ${msg}`);
    }
    

服务器端(同一解决方案)实现

1. 存储设备令牌

  • 用EF Core创建极简数据表,字段包含:Token(字符串,唯一约束)、Platform(枚举:iOS/Android/Windows)、CreatedAt(时间戳)
  • 编写POST接口/api/device-tokens,接收客户端令牌,先查重再入库,避免重复存储

2. 集成推送服务

根据目标平台选择对应服务商,直接通过NuGet包集成:

  • Android/Windows 用FCM
    安装FirebaseAdmin包,用Firebase控制台下载的服务账号文件初始化:
    var firebaseApp = FirebaseApp.Create(new AppOptions
    {
        Credential = GoogleCredential.FromFile("firebase-service-account.json")
    });
    
    批量发送通知代码:
    var messaging = FirebaseMessaging.GetMessaging(firebaseApp);
    var multicastMsg = new MulticastMessage
    {
        Tokens = 从数据库查询的所有Android/Windows令牌列表,
        Notification = new Notification { Title = "输入的标题", Body = "输入的内容" }
    };
    var result = await messaging.SendMulticastAsync(multicastMsg);
    
    注意:FCM单次最多发送500个令牌,超过需分批处理。
  • iOS 用APNs
    安装Apple.Apns包,用苹果开发者后台下载的p8密钥初始化:
    var apnsSettings = new ApnsClientSettings
    {
        AuthKeyPath = "apns-auth-key.p8",
        TeamId = "你的苹果开发者TeamID",
        BundleId = "Blazor MAUI应用的BundleID",
        Environment = ApnsEnvironment.Sandbox // 测试用沙箱,上线切换为Production
    };
    var apnsClient = new ApnsClient(apnsSettings);
    
    循环发送iOS通知:
    foreach (var token in iOS令牌列表)
    {
        var notification = new ApnsNotification(token, new ApnsPayload
        {
            Alert = new ApnsAlert { Title = "标题", Body = "内容" }
        });
        await apnsClient.SendNotificationAsync(notification);
    }
    

3. 服务器GUI实现

用ASP.NET Razor Pages或Blazor Server搭建简单页面:

  • 放置两个输入框(标题、消息内容)和一个发送按钮
  • 按钮点击后,后台调用推送逻辑:先从数据库查询所有令牌,按平台分发到FCM/APNs发送
  • 新增结果提示,展示成功/失败的推送数量

避坑小贴士

  • 令牌必须去重,同一设备重复存储会浪费推送资源
  • 苹果APNs的测试沙箱与生产环境不互通,测试用沙箱,上线切换生产
  • 服务器的密钥文件(FCM服务账号、APNs p8密钥)不要硬编码,放入配置文件或环境变量,禁止提交到代码仓库
  • 测试收不到通知时,优先排查:客户端是否成功上传令牌→服务器是否正确存储→推送服务商返回的错误码

内容的提问来源于stack exchange,提问作者Brian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:01:12