Critical alerts in Xamarin.iOS
With iOS 12, apps can send critical alerts. Critical alerts play a sound regardless of whether or not Do Not Disturb is enabled or the ringer switch is off. These notifications are disruptive and should only be used when users must take immediate action.
Custom critical alert entitlement
To display critical alerts in your app, first request a custom critical alert notifications entitlement from Apple.
After receiving this entitlement from Apple and following any associated instructions about how to configure your app to use it, add the custom entitlement to your app's Entitlements.plist file(s). Then, configure your iOS Bundle Signing options to use Entitlements.plist when signing the app on both simulator and device.
Request authorization
An app's notification authorization request prompts the user to allow or disallow an app's notifications. If the notification authorization request asks for permission to send critical alerts, the app will also give the user a chance to opt in to critical alerts.
The following code requests permission to send both critical alerts and
standard notifications and sounds by passing the appropriate
UNAuthorizationOptions
values to
RequestAuthorization
:
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
UNUserNotificationCenter center = UNUserNotificationCenter.Current;
var options = UNAuthorizationOptions.Alert | UNAuthorizationOptions.Sound | UNAuthorizationOptions.CriticalAlert;
center.RequestAuthorization(options, (bool success, NSError error) => {
// ...
);
return true;
}
Local critical alerts
To send a local critical alert, create a
UNMutableNotificationContent
and set its Sound
property to either:
UNNotificationSound.DefaultCriticalSound
, which uses the default critical notification sound.UNNotificationSound.GetCriticalSound
, which allows you to specify a custom sound that is bundled with your app and a volume.
Then, create a UNNotificationRequest
from the notification content and
add it to the notification center:
var content = new UNMutableNotificationContent()
{
Title = "Critical alert title",
Body = "Text of the critical alert",
CategoryIdentifier = "my-critical-alert-category",
// Sound = UNNotificationSound.DefaultCriticalSound
Sound = UNNotificationSound.GetCriticalSound("my_critical_sound.m4a", 1.0f)
};
var request = UNNotificationRequest.FromIdentifier(
Guid.NewGuid().ToString(),
content,
UNTimeIntervalNotificationTrigger.CreateTrigger(3, false)
);
var center = UNUserNotificationCenter.Current;
center.AddNotificationRequest(request, null);
Important
Critical alerts will not be delivered if they are not enabled for your app. Along with the prompt that appears the first time an app requests permission to send critical alerts, a user can also enable or disable critical alerts in your app's Notifications section of the iOS Settings app.
Remote critical alerts
For information about remote critical alerts, please see the What's New In User Notifications session from WWDC 2018 and the Generating a Remote Notification document.