Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Importante
Le informazioni contenute in questa sezione riguardano iOS 9 e versioni precedenti, è stata lasciata qui per supportare le versioni precedenti di iOS. Per iOS 10 e versioni successive, vedere la guida User Notification Framework per supportare notifiche locali e remote in un dispositivo iOS.
Le notifiche push devono essere mantenute brevi e contengono solo dati sufficienti per notificare all'applicazione per dispositivi mobili che deve contattare l'applicazione server per un aggiornamento. Ad esempio, quando arriva un nuovo messaggio di posta elettronica, l'applicazione server invia una notifica solo all'applicazione per dispositivi mobili che è arrivata la nuova posta elettronica. La notifica non conterrà il nuovo messaggio di posta elettronica. L'applicazione per dispositivi mobili recupererebbe quindi i nuovi messaggi di posta elettronica dal server quando era appropriato
Al centro delle notifiche push in iOS è Apple Push Notification Gateway Service (APNS). Si tratta di un servizio fornito da Apple responsabile del routing delle notifiche da un server applicazioni ai dispositivi iOS.
L'immagine seguente illustra la topologia di notifica push per iOS: 
Le notifiche remote sono stringhe in formato JSON che rispettano il formato e i protocolli specificati in sezione Del payload di notifica della Guida alla programmazione di notifiche locali e push nella documentazione per sviluppatori iOS.
Apple gestisce due ambienti di APNS: un Sandbox e un ambiente di produzione. L'ambiente Sandbox è destinato ai test durante la fase di sviluppo ed è disponibile in gateway.sandbox.push.apple.com sulla porta TCP 2195. L'ambiente di produzione è progettato per essere usato nelle applicazioni distribuite e disponibili in gateway.push.apple.com sulla porta TCP 2195.
Requisiti
La notifica push deve rispettare le regole seguenti dettate dall'architettura del servizio APN:
- 256 byte Message Limit - L'intera dimensione del messaggio della notifica non deve superare i 256 byte.
- Nessuna conferma di ricezione : il servizio APNS non fornisce al mittente alcuna notifica che ha inviato un messaggio al destinatario desiderato. Se il dispositivo non è raggiungibile e vengono inviate più notifiche sequenziali, tutte le notifiche tranne quelle più recenti andranno perse. Solo la notifica più recente verrà recapitata al dispositivo.
- Ogni applicazione richiede un certificato sicuro: è necessario eseguire la comunicazione con il servizio APN tramite SSL.
Creazione e uso di certificati
Ognuno degli ambienti menzionati nella sezione precedente richiede il proprio certificato. Questa sezione illustra come creare un certificato, associarlo a un profilo di provisioning e quindi ottenere un certificato di Scambio di informazioni personali da usare con PushSharp.
Per creare certificati, passare al portale di provisioning iOS nel sito Web di Apple, come illustrato nello screenshot seguente (si noti la voce di menu ID App a sinistra):
Passare quindi alla sezione ID app e creare un nuovo ID app, come illustrato nello screenshot seguente:
Quando si fa clic sul pulsante +, sarà possibile immettere la descrizione e un identificatore bundle per l'ID app, come illustrato nello screenshot seguente:
Assicurati di selezionare ID app esplicito e che l'identificatore del bundle non finisca con un
*. Verrà creato un identificatore valido per più applicazioni e i certificati di notifica push devono essere per una singola applicazione.In Servizi App, seleziona Notifiche Push:
Premere Invia per confermare la registrazione del nuovo ID app:
Successivamente, è necessario creare il certificato per l'ID app. Nel riquadro di spostamento a sinistra, passare a Certificati > Tutti e selezionare il pulsante
+, come illustrato nello screenshot seguente.Selezionare se si vuole usare un certificato di sviluppo o produzione:
Selezionare quindi il nuovo ID app appena creato:
Verranno visualizzate le istruzioni che consentono di eseguire il processo di creazione di una richiesta di firma del certificato usando l'applicazione accesso keychain sul Mac.
Ora che il certificato è stato creato, deve essere usato come parte del processo di compilazione per firmare l'applicazione in modo che possa registrarsi con aPN. Ciò richiede la creazione e l'installazione di un profilo di provisioning che usa il certificato.
Per creare un profilo di provisioning di sviluppo, passare alla sezione profili di provisioning e seguire la procedura per crearla usando l'ID app appena creato.
Dopo aver creato il profilo di provisioning, aprire Xcode Organizer e aggiornarlo. Se il profilo di provisioning creato non viene visualizzato, potrebbe essere necessario scaricare il profilo dal portale di provisioning iOS e importarlo manualmente. La schermata seguente mostra un esempio di Organizer con il profilo di provisioning aggiunto:
A questo punto è necessario configurare il progetto Xamarin.iOS per usare questo profilo di provisioning appena creato. Questa operazione viene eseguita dalla finestra di dialogo Opzioni progetto nella scheda Firma bundle iOS, come mostrato nello screenshot seguente:
A questo punto l'applicazione è configurata per l'uso delle notifiche push. Tuttavia, esistono ancora alcuni altri passaggi necessari con il certificato. Questo certificato è in formato DER non compatibile con PushSharp, che richiede un certificato PKCS12 (Personal Information Exchange). Per convertire il certificato in modo che sia utilizzabile da PushSharp, seguire questa procedura finale:
- Scaricare il file di certificato - Accedere al portale di provisioning iOS, scegliere la scheda Certificati, selezionare il certificato associato al profilo di provisioning corretto e scegliere Download .
- Open Keychain Access: questa è un'interfaccia gui per il sistema di gestione delle password in OS X.
- Importare il del certificato: se il certificato non è già installato, File... Importa elementi dal menu Accesso portachiavi. Passare al certificato esportato in precedenza e selezionarlo.
- Esportare il certificato - Espandere il certificato in modo che la chiave privata associata sia visibile, fare clic con il pulsante destro del mouse sulla chiave e scegliere Esporta. Verrà richiesto un nome file e una password per il file esportato.
A questo punto, abbiamo finito con i certificati. È stato creato un certificato che verrà usato per firmare le applicazioni iOS e convertirlo in un formato che può essere usato con PushSharp in un'applicazione server. Si esaminerà ora il modo in cui le applicazioni iOS interagiscono con APNS.
Registrazione con APNS
Prima che un'applicazione iOS possa ricevere una notifica remota, deve registrarsi con APNS. APNS genererà un token di dispositivo univoco e lo restituirà all'applicazione iOS. L'applicazione iOS accetta quindi il token del dispositivo e quindi si registra con il server applicazioni. Una volta completata questa operazione, la registrazione viene completata e il server applicazioni può inviare notifiche push al dispositivo mobile.
In teoria, il token del dispositivo può cambiare ogni volta che un'applicazione iOS si registra con APNS, tuttavia in pratica ciò non accade spesso. Come ottimizzazione, un'applicazione può memorizzare nella cache il token del dispositivo più recente e aggiornare il server dell'applicazione solo quando cambia. Il diagramma seguente illustra il processo di registrazione e il recupero di un token del dispositivo:
La registrazione con APNS viene gestita nel metodo FinishedLaunching della classe delegato dell'applicazione chiamando RegisterForRemoteNotificationTypes sull'oggetto UIApplication corrente. Quando un'applicazione iOS viene registrata con il servizio APN, deve anche specificare i tipi di notifiche remote da ricevere. Questi tipi di notifica remota vengono dichiarati nell'enumerazione UIRemoteNotificationType. Il frammento di codice seguente è un esempio di come un'applicazione iOS può registrarsi per ricevere notifiche remote di avviso e badge.
if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
var pushSettings = UIUserNotificationSettings.GetSettingsForTypes (
UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound,
new NSSet ());
UIApplication.SharedApplication.RegisterUserNotificationSettings (pushSettings);
UIApplication.SharedApplication.RegisterForRemoteNotifications ();
} else {
UIRemoteNotificationType notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound;
UIApplication.SharedApplication.RegisterForRemoteNotificationTypes (notificationTypes);
}
La richiesta di registrazione APNS viene eseguita in background: quando viene ricevuta la risposta, iOS chiamerà il metodo RegisteredForRemoteNotifications nella classe AppDelegate e passerà il token del dispositivo registrato. Il token sarà contenuto in un oggetto NSData. Il frammento di codice seguente illustra come recuperare il token del dispositivo fornito dal servizio APN:
public override void RegisteredForRemoteNotifications (
UIApplication application, NSData deviceToken)
{
// Get current device token
var DeviceToken = deviceToken.Description;
if (!string.IsNullOrWhiteSpace(DeviceToken)) {
DeviceToken = DeviceToken.Trim('<').Trim('>');
}
// Get previous device token
var oldDeviceToken = NSUserDefaults.StandardUserDefaults.StringForKey("PushDeviceToken");
// Has the token changed?
if (string.IsNullOrEmpty(oldDeviceToken) || !oldDeviceToken.Equals(DeviceToken))
{
//TODO: Put your own logic here to notify your server that the device token has changed/been created!
}
// Save new device token
NSUserDefaults.StandardUserDefaults.SetString(DeviceToken, "PushDeviceToken");
}
Se la registrazione non riesce per qualche motivo (ad esempio, il dispositivo non è connesso a Internet), iOS chiamerà FailedToRegisterForRemoteNotifications nella classe delegata dell'applicazione. Il frammento di codice seguente mostra come visualizzare un avviso all'utente che informa che la registrazione non è riuscita:
public override void FailedToRegisterForRemoteNotifications (UIApplication application , NSError error)
{
new UIAlertView("Error registering push notifications", error.LocalizedDescription, null, "OK", null).Show();
}
Pulizia dei token del dispositivo
I token del dispositivo scadranno o cambieranno nel tempo. A causa di questo fatto, le applicazioni server dovranno eseguire alcune operazioni di pulizia della casa e ripulire questi token scaduti o modificati. Quando un'applicazione invia una notifica push a un dispositivo con un token scaduto, APNS registrerà e salverà il token scaduto. I server possono quindi eseguire query sul servizio APN per scoprire quali token sono scaduti.
APNS forniva un servizio feedback - un endpoint HTTPS che esegue l'autenticazione tramite il certificato creato per inviare notifiche push e invia i dati relativi ai token scaduti. Questo è stato deprecato da Apple e rimosso.
È invece disponibile un nuovo codice di stato HTTP per il caso segnalato in precedenza dal servizio Commenti e suggerimenti:
410 - Il token del dispositivo non è più attivo per l'argomento.
Inoltre, una nuova chiave dati JSON timestamp sarà nel corpo della risposta:
Se il valore nell'intestazione :status è 410, il valore di questa chiave è l'ultima volta in cui gli APN confermano che il token del dispositivo non è più valido per l'argomento.
Interrompere il push delle notifiche fino a quando il dispositivo non registra un token con un timestamp successivo presso il provider.
Sommario
Questa sezione presenta i concetti chiave relativi alle notifiche push in iOS. Ha spiegato il ruolo del servizio APN (Apple Push Notification Gateway Service). Ha quindi trattato la creazione e l'uso dei certificati di sicurezza essenziali per il servizio APN. Infine, questo documento ha completato una discussione su come i server applicazioni possono usare il Feedback Services per interrompere il rilevamento dei token di dispositivo scaduti.