求.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中使用授权服务
- 在
MauiProgram.cs注册服务:
builder.Services.AddSingleton<FirebaseAuthService>();
- 编写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
相关产品推荐
相关产品推荐

