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 sprawdzaAuthorizationStatus
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)
{
// ...
Link bezpośredni
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 klasyIUNUserNotificationCenterDelegate
.
Żą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 UNUserNotificationCenter
pliku .
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);
}
}
}