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

求.NET 7 MAUI Blazor项目集成Firebase推送通知与授权方案(非.NET 6版)

.NET 7 MAUI Blazor Firebase推送通知集成与授权实现方案

一、前置准备

  • 注册Firebase项目,下载对应平台配置文件:Android用google-services.json,iOS用GoogleService-Info.plist
  • 确保已安装.NET 7 SDK及完整MAUI开发环境
  • 安装必要NuGet包:Firebase.Messaging(推送通知)、Firebase.Auth(授权)

二、集成Firebase推送通知

2.1 平台配置

  • Android:将google-services.json放入Platforms/Android目录,设置文件的「生成操作」为GoogleServicesJson
  • iOS:将GoogleService-Info.plist放入Platforms/iOS目录,设置文件的「生成操作」为BundleResource

2.2 实现推送处理服务

创建继承自FirebaseMessagingService的自定义服务,处理token更新和消息接收:

using Firebase.Messaging;
using Microsoft.Maui.ApplicationModel;

namespace YourApp.Services;

[Service]
[IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
public class FirebasePushService : FirebaseMessagingService
{
    // 设备Token更新时触发
    public override void OnNewToken(string token)
    {
        base.OnNewToken(token);
        // 保存Token到本地存储
        Preferences.Set("FirebaseDeviceToken", token);
    }

    // 前台收到推送时触发
    public override void OnMessageReceived(RemoteMessage message)
    {
        base.OnMessageReceived(message);
        var notification = message.GetNotification();
        if (notification == null) return;

        // 调用MAUI本地通知API展示消息
        Notification.Default.Show(notification.Title, notification.Body);
    }
}

2.3 初始化Firebase

在MauiProgram.cs中添加平台初始化逻辑:

using Firebase.Core;

builder.ConfigureLifecycleEvents(events =>
{
#if ANDROID
    events.AddAndroid(android => android.OnCreate((activity, bundle) =>
    {
        FirebaseApp.InitializeApp(activity);
    }));
#elif IOS
    events.AddiOS(ios => ios.FinishedLaunching((app, options) =>
    {
        FirebaseApp.Configure();
        return true;
    }));
#endif
});

三、Firebase授权实现

3.1 封装授权服务

创建FirebaseAuthService封装登录、注册等操作:

using Firebase.Auth;

namespace YourApp.Services;

public class FirebaseAuthService
{
    private readonly FirebaseAuthClient _authClient;

    public FirebaseAuthService()
    {
        var config = new FirebaseAuthConfig
        {
            ApiKey = "你的Firebase API Key",
            AuthDomain = "你的Firebase Auth Domain"
        };
        _authClient = new FirebaseAuthClient(config);
    }

    // 邮箱密码登录
    public async Task<UserCredential> SignInWithEmail(string email, string password)
    {
        return await _authClient.SignInWithEmailAndPasswordAsync(email, password);
    }

    // 注册新用户
    public async Task<UserCredential> RegisterWithEmail(string email, string password)
    {
        return await _authClient.CreateUserWithEmailAndPasswordAsync(email, password);
    }

    // 获取当前登录用户
    public User GetCurrentUser() => _authClient.User;

    // 登出
    public void SignOut() => _authClient.SignOut();
}

3.2 在Blazor中使用授权服务

  1. 在MauiProgram.cs注册服务:
builder.Services.AddSingleton<FirebaseAuthService>();
  1. 编写Blazor登录组件(Login.razor):
@inject FirebaseAuthService AuthService
@inject NavigationManager NavManager

<div class="login-container">
    <h3>用户登录</h3>
    <div class="form-group">
        <label>邮箱</label>
        <input @bind="@Email" type="email" class="form-control" />
    </div>
    <div class="form-group">
        <label>密码</label>
        <input @bind="@Password" type="password" class="form-control" />
    </div>
    <button @onclick="HandleSignIn" class="btn btn-primary mt-2">登录</button>
    <p class="text-danger mt-2">@ErrorMsg</p>
</div>

@code {
    private string Email { get; set; }
    private string Password { get; set; }
    private string ErrorMsg { get; set; }

    private async Task HandleSignIn()
    {
        ErrorMsg = string.Empty;
        try
        {
            var credential = await AuthService.SignInWithEmail(Email, Password);
            // 登录成功后可上传用户ID与设备Token的关联到后端
            await UploadUserTokenMapping(credential.User.Uid);
            NavManager.NavigateTo("/");
        }
        catch (FirebaseAuthException ex)
        {
            ErrorMsg = ex.Message;
        }
    }

    private async Task UploadUserTokenMapping(string userId)
    {
        var token = Preferences.Get("FirebaseDeviceToken", string.Empty);
        if (!string.IsNullOrEmpty(token))
        {
            // 调用后端API保存用户ID与Token的映射关系
            // 示例:await _httpClient.PostAsync("/api/user-tokens", new StringContent(JsonSerializer.Serialize(new { UserId = userId, Token = token }), Encoding.UTF8, "application/json"));
        }
    }
}

四、权限配置

  • Android:在Platforms/Android/AndroidManifest.xml添加权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
  • iOS:在Platforms/iOS/Info.plist添加权限描述:
<key>NSNotificationSettingsUsageDescription</key>
<string>需要通知权限接收推送消息</string>
<key>NSRemoteNotificationUsageDescription</key>
<string>需要远程通知权限接收推送消息</string>

五、测试推送

通过Firebase控制台的「Cloud Messaging」发送测试通知:

  • 前台运行APP时,会触发OnMessageReceived并展示本地通知
  • 后台运行时,由系统直接展示通知(需确保APP已获得通知权限)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:03:29