4using UserNotifications;
10using Android.Content.PM;
12using AndroidX.Core.Content;
21 public override Task<PermissionStatus> CheckStatusAsync()
24 return CheckStatusIOSAsync();
27 if (Build.VERSION.SdkInt >= BuildVersionCodes.Tiramisu && OperatingSystem.IsAndroidVersionAtLeast(33))
29 Android.Content.Context Context = Android.App.Application.Context;
31 int Result = (int)ContextCompat.CheckSelfPermission(Context, Manifest.Permission.PostNotifications);
32 return Task.FromResult(Result == (
int)Permission.Granted ? PermissionStatus.Granted : PermissionStatus.Denied);
35 return Task.FromResult(PermissionStatus.Granted);
37 return Task.FromResult(PermissionStatus.Unknown);
42 private static async Task<PermissionStatus> CheckStatusIOSAsync()
45 UNNotificationSettings Settings = await UNUserNotificationCenter.Current.GetNotificationSettingsAsync();
46 return Settings.AuthorizationStatus
switch
48 UNAuthorizationStatus.Authorized => PermissionStatus.Granted,
49 UNAuthorizationStatus.Denied => PermissionStatus.Denied,
50 _ => PermissionStatus.Unknown
55 public override void EnsureDeclared()
58 if (!OperatingSystem.IsAndroidVersionAtLeast(33))
64 Android.Content.Context Context = Android.App.Application.Context;
65 PackageManager PackageManager = Context.PackageManager ??
throw new Exception();
66 string? PackageName = Context.PackageName;
68 PackageInfo PackageInfo = PackageManager.GetPackageInfo(PackageName ??
string.Empty, PackageInfoFlags.Permissions) ??
throw new Exception();
69 IList<string>? DeclaredPermissions = PackageInfo.RequestedPermissions;
70 if (DeclaredPermissions is
null || !DeclaredPermissions.Contains(Manifest.Permission.PostNotifications))
72 throw new PermissionException($
"The Android manifest does not declare the required permission: {Manifest.Permission.PostNotifications}");
75 catch (PackageManager.NameNotFoundException)
77 ServiceRef.
LogService.LogWarning(
"Unable to verify that the POST_NOTIFICATIONS permission is declared in the manifest.");
78 throw new PermissionException(
"The Android manifest does not declare the required permission: " + Manifest.Permission.PostNotifications);
89 public override async Task<PermissionStatus> RequestAsync()
93 (
bool Granted, NSError Error) = await UNUserNotificationCenter.Current.RequestAuthorizationAsync(
94 UNAuthorizationOptions.Alert | UNAuthorizationOptions.Badge | UNAuthorizationOptions.Sound);
98 UIApplication.SharedApplication.InvokeOnMainThread(() =>
100 UIApplication.SharedApplication.RegisterForRemoteNotifications();
103 return Granted ? PermissionStatus.Granted : PermissionStatus.Denied;
105 if (Build.VERSION.SdkInt >= BuildVersionCodes.Tiramisu && OperatingSystem.IsAndroidVersionAtLeast(33))
108 PermissionStatus Status = await Permissions.RequestAsync<Permissions.PostNotifications>();
112 return PermissionStatus.Granted;
114 return PermissionStatus.Unknown;
119 public override bool ShouldShowRationale() =>
true;
Base class that references services in the app.
static ILogService LogService
Log service.