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

如何检查MAUI应用在Android、iOS设备上的推送通知启用状态

在.NET MAUI中检查Android和iOS的通知权限状态

要在MAUI应用启动时检查用户是否禁用通知权限,需要针对Android和iOS分别实现平台特定的权限检查逻辑,以下是具体实现方案:

1. 定义共享接口

首先在MAUI共享项目中定义统一的权限检查接口,方便跨平台调用:

public interface INotificationPermissionChecker
{
    bool AreNotificationsEnabled();
}

2. Android平台实现

Android需要结合通知渠道状态和全局通知权限综合判断:
在Android项目中创建接口实现类:

using Android.App;
using Android.Content;
using Android.OS;
using AndroidX.Core.App;

public class NotificationPermissionChecker : INotificationPermissionChecker
{
    public bool AreNotificationsEnabled()
    {
        // Android 8.0及以上需检查所有通知渠道的启用状态
        if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
        {
            var notificationManager = Application.Context.GetSystemService(Context.NotificationService) as NotificationManager;
            var channels = notificationManager?.NotificationChannels;
            if (channels != null)
            {
                foreach (var channel in channels)
                {
                    // 只要有一个渠道被禁用,就判定通知权限未完全启用
                    if (channel.Importance == NotificationImportance.None)
                    {
                        return false;
                    }
                }
            }
        }
        // 检查应用全局通知权限
        return NotificationManagerCompat.From(Application.Context).AreNotificationsEnabled();
    }
}

3. iOS平台实现

iOS通过UNUserNotificationCenter直接获取通知授权状态:
在iOS项目中创建接口实现类:

using UserNotifications;

public class NotificationPermissionChecker : INotificationPermissionChecker
{
    public bool AreNotificationsEnabled()
    {
        var notificationCenter = UNUserNotificationCenter.Current;
        var settings = notificationCenter.GetNotificationSettingsAsync().Result;
        // 仅当授权状态为Authorized时,通知功能完全可用
        return settings.AuthorizationStatus == UNAuthorizationStatus.Authorized;
    }
}

4. 注册依赖服务

在MauiProgram.cs中根据平台注册对应的实现:

var builder = MauiApp.CreateBuilder();
builder
    .UseMauiApp<App>()
    .ConfigureFonts(fonts =>
    {
        fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
    });

// 注册通知权限检查服务
#if ANDROID
builder.Services.AddSingleton<INotificationPermissionChecker, NotificationPermissionChecker>();
#elif IOS
builder.Services.AddSingleton<INotificationPermissionChecker, NotificationPermissionChecker>();
#endif

return builder.Build();

5. 应用启动时执行检查

在App.xaml.cs的OnStart方法中调用检查逻辑:

protected override void OnStart()
{
    var permissionChecker = MauiProgram.Services.GetService<INotificationPermissionChecker>();
    bool isNotificationsEnabled = permissionChecker?.AreNotificationsEnabled() ?? false;
    
    if (!isNotificationsEnabled)
    {
        // 此处可添加提示逻辑,比如弹出对话框引导用户前往应用设置开启通知权限
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:16:10