davidortinau/maui-skills/maui-local-notifications

Claude Code and agent skill by davidortinau/maui-skills

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Add local notifications to .NET MAUI apps on Android, iOS, and Mac Catalyst. Covers notification channels, permissions, scheduling, foreground/background handling, and DI registration. Works with XAML/MVVM, C# Markup, and MauiReactor. USE FOR: "local notification", "schedule notification", "notification channel", "notification permission", "reminder notification", "alert notification", "in-app notification", "foreground notification". DO NOT USE FOR: push notifications from a server (use maui-push-notifications), permission handling only (use maui-permissions), or app lifecycle background tasks (use maui-app-lifecycle).

Install

npx vskill@latest install davidortinau/maui-skills/maui-local-notifications

SKILL.md

.NET MAUI Local Notifications

Implementation overview

  1. Define cross-platform INotificationManagerService interface and event args
  2. Implement Android notification service (channel, AlarmManager, BroadcastReceiver)
  3. Implement iOS/Mac Catalyst notification service (UNUserNotificationCenter)
  4. Register platform implementations via DI
  5. Configure platform permissions and MainActivity

See references/local-notifications-api.md for full implementation code.

Platform gotchas

Android
IssueFix
Notifications silently fail on API 33+Must request POST_NOTIFICATIONS runtime permission first
PendingIntent crash on Android 12+Must include PendingIntentFlags.Immutable for API 31+
Scheduled notifications lost on rebootAlarmManager does not survive device restart — re-schedule on boot via BOOT_COMPLETED receiver
No notification appearsChannel not created — required on API 26+ (Android 8.0)
Notification tap doesn't return to appLaunchMode = LaunchMode.SingleTop must be set on MainActivity
csharp
// ✅ Correct — API 31+ requires Immutable flag
var pendingIntentFlags = (Build.VERSION.SdkInt >= BuildVersionCodes.S)
? PendingIntentFlags.CancelCurrent | PendingIntentFlags.Immutable
: PendingIntentFlags.CancelCurrent;
// ❌ Wrong — crashes on Android 12+
var pendingIntentFlags = PendingIntentFlags.CancelCurrent;
iOS / Mac Catalyst
IssueFix
No notification prompt appearsPermission already denied — user must re-enable in Settings
Foreground notifications don't showMust implement UNUserNotificationCenterDelegate and set Current.Delegate
Notification shows Alert not BannerUse UNNotificationPresentationOptions.Banner on iOS 14+
csharp
// ✅ iOS 14+ — use Banner
completionHandler(OperatingSystem.IsIOSVersionAtLeast(14)
? UNNotificationPresentationOptions.Banner
: UNNotificationPresentationOptions.Alert);
// ❌ Always using Alert — deprecated on iOS 14+
completionHandler(UNNotificationPresentationOptions.Alert);
Windows

⚠️ Windows App SDK supports toast notifications but scheduled notifications are not yet supported. Immediate notifications work.

DI registration — platform-specific only

csharp
// ✅ Must use #if guards — there's no cross-platform implementation
#if ANDROID
builder.Services.AddTransient<INotificationManagerService,
Platforms.Android.NotificationManagerService>();
#elif IOS
builder.Services.AddTransient<INotificationManagerService,
Platforms.iOS.NotificationManagerService>();
#elif MACCATALYST
builder.Services.AddTransient<INotificationManagerService,
Platforms.MacCatalyst.NotificationManagerService>();
#endif

Common anti-patterns

csharp
// ❌ Sending without checking permission — silent failure on API 33+
notificationManager.SendNotification("Title", "Body");
// ✅ Request permission first
#if ANDROID
var status = await Permissions.RequestAsync<Platforms.Android.NotificationPermission>();
if (status != PermissionStatus.Granted) return;
#endif
// ❌ Updating UI directly from notification callback — cross-thread exception
notificationManager.NotificationReceived += (s, e) =>
myLabel.Text = ((NotificationEventArgs)e).Title;
// ✅ Marshal to UI thread
notificationManager.NotificationReceived += (s, e) =>
MainThread.BeginInvokeOnMainThread(() =>
myLabel.Text = ((NotificationEventArgs)e).Title);

Decision framework

NeedApproach
Immediate notificationSendNotification(title, message) with null notifyTime
Scheduled reminderSendNotification(title, message, DateTime.Now.AddMinutes(30))
Persist across reboot (Android)Add BOOT_COMPLETED receiver to re-schedule alarms
Rich notifications (images, actions)Extend platform implementations with native APIs
Push notifications from serverUse a different pattern entirely (FCM/APNs)

Quick checklist

  • [ ] Cross-platform INotificationManagerService interface defined
  • [ ] Android: notification channel created (API 26+)
  • [ ] Android: POST_NOTIFICATIONS permission in manifest + runtime request (API 33+)
  • [ ] Android: PendingIntentFlags.Immutable used (API 31+)
  • [ ] Android: MainActivity has LaunchMode.SingleTop and handles OnNewIntent
  • [ ] iOS: UNUserNotificationCenterDelegate set for foreground display
  • [ ] iOS: Banner used instead of Alert on iOS 14+
  • [ ] DI registration uses #if platform guards
  • [ ] UI updates from notification callbacks use MainThread.BeginInvokeOnMainThread

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
122
Repository forks
16
7-day trend score
24

Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 22 Apr 2026, 6 months ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/davidortinau/maui-skills/maui-local-notifications/badge)](https://verified-skill.com/skills/davidortinau/maui-skills/maui-local-notifications)

Something wrong with this skill or its page? Tell us.