Freigeben über


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 sie AuthorizationStatus .
  • 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)
    {
        // ...

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 von IUNUserNotificationCenterDelegate.

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 UNUserNotificationCenterBenachrichtigung ü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);
        }

    }
}