Notifiche in Xamarin.iOS
Importante
Le informazioni contenute in questa sezione riguardano iOS 9 e versioni precedenti. Per iOS 10 e versioni successive, vedere la Guida al framework di notifica utente.
iOS offre tre modi per indicare all'utente che è stata ricevuta una notifica:
- Suono o vibrazione : iOS può riprodurre un suono per notificare agli utenti. Se il suono è disabilitato, il dispositivo può essere configurato per vibrare.
- Avvisi : è possibile visualizzare una finestra di dialogo sullo schermo con informazioni sulla notifica.
- Badge: quando viene pubblicata una notifica, è possibile visualizzare un numero (badge) sull'icona dell'applicazione.
iOS fornisce anche un Centro notifiche che visualizzerà tutte le notifiche, sia locali che remote, all'utente. Gli utenti possono accedervi scorrendo verso il basso dalla parte superiore della schermata:
Creazione di notifiche locali in iOS
iOS semplifica la creazione e la gestione delle notifiche locali. Prima di tutto, iOS 8 richiede alle applicazioni di richiedere l'autorizzazione dell'utente per visualizzare le notifiche. Aggiungere il codice seguente all'app prima di tentare di inviare una notifica locale, in genere nel metodo FinishedLaunching di AppDelegate:
var notificationSettings = UIUserNotificationSettings.GetSettingsForTypes(
UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, null
);
application.RegisterUserNotificationSettings(notificationSettings);
Per pianificare una notifica locale, creare un UILocalNotification
oggetto , impostarlo FireDate
e pianificarlo tramite il ScheduleLocalNotification
metodo sull'oggetto UIApplication.SharedApplication
. Il frammento di codice seguente illustra come pianificare una notifica che verrà attivata un minuto in futuro e visualizzare un avviso con un messaggio:
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);
Lo screenshot seguente mostra l'aspetto di questo avviso:
Si noti che se l'utente ha scelto di non consentire le notifiche, non verrà visualizzato alcun elemento.
Se si vuole applicare una notifica all'icona dell'applicazione con un numero, è possibile impostarla come illustrato nel codice della riga seguente:
notification.ApplicationIconBadgeNumber = 1;
Per riprodurre un suono con l'icona, impostare la proprietà SoundName sulla notifica come illustrato nel frammento di codice seguente:
notification.SoundName = UILocalNotification.DefaultSoundName;
Se il suono di notifica è più lungo di 30 secondi, iOS riproduce invece il suono predefinito.
Importante
È presente un bug nel simulatore iOS che attiverà la notifica del delegato due volte. Questo problema non deve verificarsi quando si esegue l'applicazione in un dispositivo.
Gestione delle notifiche
Le applicazioni iOS gestiscono le notifiche remote e locali quasi esattamente allo stesso modo. Quando un'applicazione è in esecuzione, verrà chiamato il ReceivedLocalNotification
metodo o il ReceivedRemoteNotification
metodo nella AppDelegate
classe e le informazioni di notifica verranno passate come parametro.
Un'applicazione può gestire una notifica in modi diversi. Ad esempio, l'applicazione potrebbe semplicemente visualizzare un avviso per ricordare agli utenti alcuni eventi. In alternativa, è possibile usare la notifica per visualizzare un avviso all'utente che un processo è stato completato, ad esempio la sincronizzazione di file in un server.
Il codice seguente illustra come gestire una notifica locale e visualizzare un avviso e reimpostare il numero di badge su zero:
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;
}
Se l'applicazione non è in esecuzione, iOS riprodurrà il suono e/o aggiornerà il badge dell'icona in base alle esigenze. Quando l'utente avvia l'applicazione associata all'avviso, l'applicazione verrà avviata e il FinishedLaunching
metodo sul delegato dell'app verrà chiamato e le informazioni di notifica verranno passate tramite il launchOptions
parametro . Se il dizionario delle opzioni contiene la chiave UIApplication.LaunchOptionsLocalNotificationKey
, l'oggetto AppDelegate
sa che l'applicazione è stata avviata da una notifica locale. Il frammento di codice seguente illustra questo processo:
// 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;
}
}
Per una notifica remota, launchOptions
avrà un LaunchOptionsRemoteNotificationKey
oggetto associato NSDictionary
contenente il payload di notifica remota. È possibile estrarre il payload di notifica tramite le alert
chiavi , badge
e sound
. Il frammento di codice seguente illustra come ottenere notifiche remote:
NSDictionary remoteNotification = options[UIApplication.LaunchOptionsRemoteNotificationKey];
if(remoteNotification != null)
{
string alert = remoteNotification["alert"];
}
Riepilogo
Questa sezione illustra come creare e pubblicare una notifica in Xamarin.iOS. Viene illustrato come un'applicazione può reagire alle notifiche eseguendo l'override del ReceivedLocalNotification
metodo o del ReceivedRemoteNotification
metodo in AppDelegate
.