Udostępnij za pośrednictwem


Powiadomienia w środowisku Xamarin.iOS

Ważne

Informacje w tej sekcji dotyczą systemu iOS 9 i wcześniejszych. W przypadku systemu iOS 10 lub nowszego zapoznaj się z przewodnikiem dotyczącym platformy powiadomień użytkownika.

System iOS ma trzy sposoby wskazywania użytkownikowi, że odebrano powiadomienie:

  • Dźwięk lub wibracje — system iOS może odtwarzać dźwięk, aby powiadamiać użytkowników. Jeśli dźwięk jest wyłączony, urządzenie można skonfigurować do wibrowania.
  • Alerty — można wyświetlić okno dialogowe na ekranie z informacjami o powiadomieniu.
  • Znaczki — po opublikowaniu powiadomienia można wyświetlić (znaczek) na ikonie aplikacji.

System iOS udostępnia również centrum powiadomień, które będzie wyświetlać wszystkie powiadomienia zarówno lokalne, jak i zdalne dla użytkownika. Użytkownicy mogą uzyskać do tego dostęp, przesuwając palcem w dół od góry ekranu:

Centrum powiadomień

Tworzenie powiadomień lokalnych w systemie iOS

System iOS sprawia, że tworzenie i obsługa powiadomień lokalnych jest dość proste. Najpierw system iOS 8 wymaga, aby aplikacje poprosiły o uprawnienie użytkownika do wyświetlania powiadomień. Dodaj następujący kod do aplikacji przed podjęciem próby wysłania powiadomienia lokalnego, zazwyczaj w metodzie FinishedLaunching aplikacji AppDelegate:

var notificationSettings = UIUserNotificationSettings.GetSettingsForTypes(
    UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, null
);
application.RegisterUserNotificationSettings(notificationSettings);

Potwierdzanie możliwości wysyłania powiadomienia lokalnego

Aby zaplanować powiadomienie lokalne, utwórz UILocalNotification obiekt, ustaw obiekt i zaplanuj FireDatego za pomocą ScheduleLocalNotification metody w UIApplication.SharedApplication obiekcie . Poniższy fragment kodu pokazuje, jak zaplanować powiadomienie, które będzie uruchamiane minutę w przyszłości, i wyświetlać alert z komunikatem:

UILocalNotification notification = new UILocalNotification();
notification.FireDate = NSDate.FromTimeIntervalSinceNow(15);
//notification.AlertTitle = "Alert Title"; // required for Apple Watch notifications
notification.AlertAction = "View Alert";
notification.AlertBody = "Your 15 second alert has fired!";
UIApplication.SharedApplication.ScheduleLocalNotification(notification);

Poniższy zrzut ekranu przedstawia wygląd tego alertu:

Przykładowy alert

Należy pamiętać, że jeśli użytkownik zdecydował się nie zezwalać na powiadomienia, nic nie będzie wyświetlane.

Jeśli chcesz zastosować wskaźnik do ikony aplikacji z liczbą, możesz ją ustawić, jak pokazano w poniższym kodzie wiersza:

notification.ApplicationIconBadgeNumber = 1;

Aby odtworzyć dźwięk z ikoną, ustaw właściwość SoundName w powiadomieniu, jak pokazano w poniższym fragmencie kodu:

notification.SoundName = UILocalNotification.DefaultSoundName;

Jeśli dźwięk powiadomienia jest dłuższy niż 30 sekund, system iOS będzie odtwarzać domyślny dźwięk.

Ważne

W symulatorze systemu iOS występuje usterka, która dwukrotnie uruchomi powiadomienie delegata. Ten problem nie powinien wystąpić podczas uruchamiania aplikacji na urządzeniu.

Obsługa powiadomień

Aplikacje systemu iOS obsługują powiadomienia zdalne i lokalne w niemal dokładnie taki sam sposób. Gdy aplikacja jest uruchomiona, ReceivedLocalNotification zostanie wywołana metoda lub ReceivedRemoteNotification metoda w AppDelegate klasie, a informacje o powiadomieniach zostaną przekazane jako parametr.

Aplikacja może obsługiwać powiadomienia na różne sposoby. Na przykład aplikacja może po prostu wyświetlić alert, aby przypomnieć użytkownikom o pewnym zdarzeniu. Lub powiadomienie może służyć do wyświetlania alertu użytkownikowi, który zakończył proces, na przykład synchronizowanie plików z serwerem.

Poniższy kod przedstawia sposób obsługi powiadomienia lokalnego i wyświetlania alertu oraz resetowania numeru wskaźnika do zera:

public override void ReceivedLocalNotification(UIApplication application, UILocalNotification notification)
{
    // show an alert
    UIAlertController okayAlertController = UIAlertController.Create(notification.AlertAction, notification.AlertBody, UIAlertControllerStyle.Alert);
    okayAlertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));

    Window.RootViewController.PresentViewController(okayAlertController, true, null);

    // reset our badge
    UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
}

Jeśli aplikacja nie jest uruchomiona, system iOS będzie odtwarzać dźwięk i/lub zaktualizować wskaźnik ikony zgodnie z zastosowaniem. Po uruchomieniu aplikacji skojarzonej z alertem aplikacja zostanie uruchomiona, a FinishedLaunching metoda na pełnomocniku aplikacji zostanie wywołana, a informacje o powiadomieniach zostaną przekazane za pośrednictwem parametru launchOptions . Jeśli słownik opcji zawiera klucz UIApplication.LaunchOptionsLocalNotificationKey, AppDelegate wiadomo, że aplikacja została uruchomiona z powiadomienia lokalnego. Poniższy fragment kodu przedstawia ten proces:

// check for a local notification
if (launchOptions.ContainsKey(UIApplication.LaunchOptionsLocalNotificationKey))
{
    var localNotification = launchOptions[UIApplication.LaunchOptionsLocalNotificationKey] as UILocalNotification;
    if (localNotification != null)
    {
        UIAlertController okayAlertController = UIAlertController.Create(localNotification.AlertAction, localNotification.AlertBody, UIAlertControllerStyle.Alert);
        okayAlertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));

        Window.RootViewController.PresentViewController(okayAlertController, true, null);

        // reset our badge
        UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
    }
}

W przypadku powiadomienia launchOptions zdalnego element będzie miał LaunchOptionsRemoteNotificationKey element ze skojarzonym NSDictionary ładunkiem powiadomień zdalnych. Ładunek powiadomień można wyodrębnić za pomocą klawiszy alert, badgei sound . Poniższy fragment kodu pokazuje, jak otrzymywać powiadomienia zdalne:

NSDictionary remoteNotification = options[UIApplication.LaunchOptionsRemoteNotificationKey];
if(remoteNotification != null)
{
    string alert = remoteNotification["alert"];
}

Podsumowanie

W tej sekcji pokazano, jak utworzyć i opublikować powiadomienie w środowisku Xamarin.iOS. Pokazuje ona, jak aplikacja może reagować na powiadomienia, przesłaniając metodę ReceivedLocalNotification lub ReceivedRemoteNotification metodę w AppDelegatepliku .