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:
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);
Aby zaplanować powiadomienie lokalne, utwórz UILocalNotification
obiekt, ustaw obiekt i zaplanuj FireDate
go 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:
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
, badge
i 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 AppDelegate
pliku .