Udostępnij za pośrednictwem


Zarządzanie powiadomieniami na platformie Xamarin.iOS

W systemie iOS 12 system operacyjny może połączyć się głęboko z Centrum powiadomień i aplikacją Ustawienia z ekranem zarządzania powiadomieniami aplikacji. Ten ekran powinien zezwalać użytkownikom na rezygnację z różnych typów powiadomień wysyłanych przez aplikację.

Ekran zarządzania powiadomieniami

W przykładowej aplikacji definiuje interfejs użytkownika, ManageNotificationsViewController który umożliwia użytkownikom niezależne włączanie i wyłączanie czerwonych powiadomień i zielonych powiadomień. Jest to standard UIViewController zawierający element UISwitch dla każdego typu powiadomienia. Przełączanie przełącznika dla dowolnego typu zapisywania powiadomień w domyślnych ustawieniach użytkownika preferencji użytkownika dla tego typu powiadomienia:

partial void HandleRedNotificationsSwitchValueChange(UISwitch sender)
{
    NSUserDefaults.StandardUserDefaults.SetBool(sender.On, RedNotificationsEnabledKey);
}

Uwaga

Ekran zarządzania powiadomieniami sprawdza również, czy użytkownik wyłączył całkowicie powiadomienia dla aplikacji. Jeśli tak, spowoduje to ukrycie przełączeń dla poszczególnych typów powiadomień. W tym celu ekran zarządzania powiadomieniami:

  • Wywołuje UNUserNotificationCenter.Current.GetNotificationSettingsAsync i sprawdza AuthorizationStatus właściwość .
  • Ukrywa przełączanie poszczególnych typów powiadomień, jeśli powiadomienia zostały całkowicie wyłączone dla aplikacji.
  • Ponownie sprawdza, czy powiadomienia zostały wyłączone za każdym razem, gdy aplikacja przechodzi na pierwszy plan, ponieważ użytkownik może włączać/wyłączać powiadomienia w systemie iOS Ustawienia w dowolnym momencie.

Klasa przykładowej aplikacji ViewController , która wysyła powiadomienia, sprawdza preferencje użytkownika przed wysłaniem powiadomienia lokalnego, aby upewnić się, że powiadomienie jest typu, który użytkownik chce otrzymywać:

partial void HandleTapRedNotificationButton(UIButton sender)
{
    bool redEnabled = NSUserDefaults.StandardUserDefaults.BoolForKey(ManageNotificationsViewController.RedNotificationsEnabledKey);
    if (redEnabled)
    {
        // ...

Linki bezpośrednie systemu iOS do ekranu zarządzania powiadomieniami aplikacji z Centrum powiadomień i ustawień powiadomień aplikacji w aplikacji Ustawienia. Aby to ułatwić, aplikacja musi:

  • Wskaż, że ekran zarządzania powiadomieniami jest dostępny, przekazując UNAuthorizationOptions.ProvidesAppNotificationSettings do żądania autoryzacji powiadomień aplikacji.
  • Zaimplementuj metodę OpenSettings z klasy IUNUserNotificationCenterDelegate.

Żądanie autoryzacji

Aby wskazać systemowi operacyjnemu, że jest dostępny ekran zarządzania powiadomieniami, aplikacja powinna przekazać UNAuthorizationOptions.ProvidesAppNotificationSettings opcję (wraz z innymi opcjami dostarczania powiadomień, których potrzebuje) do RequestAuthorization metody w UNUserNotificationCenterpliku .

Na przykład w przykładowej aplikacji 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 Ustawienia, metoda

OpenSettings Metoda wywoływana przez system w celu bezpośredniego połączenia z ekranem zarządzania powiadomieniami aplikacji powinna przechodzić bezpośrednio do tego ekranu.

W przykładowej aplikacji ta metoda wykonuje segue w ManageNotificationsViewController razie potrzeby:

[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);
        }

    }
}