Benachrichtigungsverwaltung in Xamarin.iOS
In iOS 12 kann das Betriebssystem deep link aus dem Notification Center und der Einstellungen App zum Benachrichtigungsverwaltungsbildschirm einer App erstellen. Dieser Bildschirm sollte Benutzern das Anmelden und Abmelden der verschiedenen Arten von Benachrichtigungen ermöglichen, die die App sendet.
Bildschirm "Benachrichtigungsverwaltung"
In der Beispiel-App wird eine Benutzeroberfläche definiert, ManageNotificationsViewController
über die Benutzer rote Benachrichtigungen und grüne Benachrichtigungen unabhängig aktivieren und deaktivieren können. Es ist ein Standard UIViewController
enthält einen UISwitch
für jeden Benachrichtigungstyp. Umschalten des Schalters für beide Arten von Benachrichtigungsspeichern in den Standardeinstellungen des Benutzers für diesen Benachrichtigungstyp:
partial void HandleRedNotificationsSwitchValueChange(UISwitch sender)
{
NSUserDefaults.StandardUserDefaults.SetBool(sender.On, RedNotificationsEnabledKey);
}
Hinweis
Auf dem Benachrichtigungsverwaltungsbildschirm wird auch überprüft, ob der Benutzer Benachrichtigungen für die App vollständig deaktiviert hat. Wenn ja, blendet es die Umschaltfläche für die einzelnen Benachrichtigungstypen aus. Dazu wird der Benachrichtigungsverwaltungsbildschirm angezeigt:
- Ruft die Eigenschaft auf
UNUserNotificationCenter.Current.GetNotificationSettingsAsync
und untersucht sieAuthorizationStatus
. - Blendet die Umschaltfläche für die einzelnen Benachrichtigungstypen aus, wenn Benachrichtigungen für die App vollständig deaktiviert wurden.
- Überprüft erneut, ob Benachrichtigungen jedes Mal deaktiviert wurden, wenn die Anwendung in den Vordergrund wechselt, da der Benutzer Benachrichtigungen in iOS-Einstellungen jederzeit aktivieren/deaktivieren kann.
Die Klasse der Beispiel-App ViewController
, die die Benachrichtigungen sendet, überprüft die Einstellung des Benutzers, bevor eine lokale Benachrichtigung gesendet wird, um sicherzustellen, dass die Benachrichtigung vom Typ ist, den der Benutzer tatsächlich erhalten möchte:
partial void HandleTapRedNotificationButton(UIButton sender)
{
bool redEnabled = NSUserDefaults.StandardUserDefaults.BoolForKey(ManageNotificationsViewController.RedNotificationsEnabledKey);
if (redEnabled)
{
// ...
Deep-Link
iOS-Deep-Links zum Benachrichtigungsverwaltungsbildschirm einer App über das Notification Center und die Benachrichtigungseinstellungen der App in der Einstellungen-App. Um dies zu erleichtern, muss eine App Folgendes ausführen:
- Geben Sie an, dass ein Benachrichtigungsverwaltungsbildschirm verfügbar ist, indem Sie an die Benachrichtigungsautorisierungsanforderung der App übergeben
UNAuthorizationOptions.ProvidesAppNotificationSettings
. - Implementieren Sie die
OpenSettings
Methode vonIUNUserNotificationCenterDelegate
.
Autorisierungsanforderung
Um dem Betriebssystem anzugeben, dass ein Benachrichtigungsverwaltungsbildschirm verfügbar ist, sollte eine App die UNAuthorizationOptions.ProvidesAppNotificationSettings
Option (zusammen mit allen anderen benötigten Benachrichtigungsübermittlungsoptionen) an die RequestAuthorization
Methode der UNUserNotificationCenter
Benachrichtigung übergeben.
Beispiel:AppDelegate
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
// Request authorization to send notifications
UNUserNotificationCenter center = UNUserNotificationCenter.Current;
var options = UNAuthorizationOptions.ProvidesAppNotificationSettings | UNAuthorizationOptions.Alert | UNAuthorizationOptions.Sound | UNAuthorizationOptions.Provisional;
center.RequestAuthorization(options, (bool success, NSError error) =>
{
// ...
Open Einstellungen-Methode
Die OpenSettings
Methode, die vom System aufgerufen wird, um eine Deep-Verknüpfung mit dem Benachrichtigungsverwaltungsbildschirm einer App zu erstellen, sollte den Benutzer direkt zu diesem Bildschirm navigieren.
In der Beispiel-App führt diese Methode bei Bedarf den Folgenden ManageNotificationsViewController
aus:
[Export("userNotificationCenter:openSettingsForNotification:")]
public void OpenSettings(UNUserNotificationCenter center, UNNotification notification)
{
var navigationController = Window.RootViewController as UINavigationController;
if (navigationController != null)
{
var currentViewController = navigationController.VisibleViewController;
if (currentViewController is ViewController)
{
currentViewController.PerformSegue(ManageNotificationsViewController.ShowManageNotificationsSegue, this);
}
}
}