Esercitazione: Creare notifiche push nell'app iOS
Questa esercitazione illustra come creare notifiche push nell'app iOS usando Servizi di comunicazione di Azure Chat SDK.
Le notifiche push avvisano gli utenti dei messaggi in arrivo in un thread di chat quando l'app per dispositivi mobili non è in esecuzione in primo piano. Servizi di comunicazione di Azure supporta due versioni di notifiche push:
Versione di base: viene visualizzato un numero di badge sull'icona dell'app, il dispositivo riproduce un suono di notifica e viene visualizzato un banner di avviso popup.
Versione avanzata: oltre alle funzionalità supportate nella versione di base, è possibile personalizzare il titolo e l'anteprima del messaggio nel banner di avviso.
In questa esercitazione:
- Configurare un certificato APPLE Push Notification Service (APN).
- Configurare Xcode per le notifiche push.
- Implementare una versione di base o avanzata delle notifiche push.
- Testare le notifiche nell'app.
- Configurare il rinnovo automatico della registrazione per le notifiche push.
Scaricare il codice
Accedere al codice di esempio per questa esercitazione su GitHub.
Prerequisiti
Completare tutti i passaggi dei prerequisiti in Avvio rapido: Aggiungere chat all'app.
Creare un hub di notifica di Azure nella stessa sottoscrizione della risorsa di Servizi di comunicazione e quindi collegare l'hub di notifica alla risorsa di Servizi di comunicazione. Vedere Provisioning dell'hub di notifica.
Creare un certificato APN con estensione p12 e impostarlo nell'hub di notifica
Se non si è un cliente interno Microsoft, seguire tutti i passaggi descritti nella procedura seguente.
Se si è un cliente interno Microsoft, inviare un ticket e specificare l'ID bundle dell'app per ottenere un certificato con estensione p12. Passare quindi all'ultimo passaggio della procedura seguente.
Accedere al portale per sviluppatori Apple.
Passare a Certificati, Identificatori e>Identificatori identificatori>id app e quindi selezionare l'ID app associato all'app.
Nella pagina dell'ID app selezionare Funzionalità>push notifiche e quindi salva.
Nella finestra di dialogo Modifica funzionalità app visualizzata selezionare Conferma.
Nella pagina dell'ID app selezionare Capabilities>Push Notifications Configure (Configura notifiche>push funzionalità) e quindi effettuare la scelta seguente:
- Per testare le notifiche push durante lo sviluppo di un'app iOS, selezionare il pulsante Crea certificato in Certificato SSL di sviluppo.
- Per l'invio di notifiche push nell'ambiente di produzione, selezionare il pulsante Crea certificato in Certificato SSL di produzione.
L'area Crea un nuovo certificato viene visualizzata nella pagina Certificati, Identificatori e profili .
In questa area si carica una richiesta di firma del certificato (CSR):
In una nuova scheda del browser seguire questa pagina della Guida di Apple per creare una richiesta di firma del certificato e salvare il file come app name.cer. Le istruzioni includono l'uso dell'Assistente certificati per richiedere un certificato e compilare le informazioni sul certificato.
Trascinare il file .cer nell'area Scegli file . Selezionare quindi Continua nell'angolo superiore destro.
Selezionare Download.
Salvare il file in locale in formato p12.
Aprire il file .cer scaricato. In Accesso portachiavi selezionare il certificato, fare clic con il pulsante destro del mouse e quindi esportare il certificato in formato .p12.
Passare all'hub di notifica. In Impostazioni selezionare Apple (APNS). Compilare quindi i dettagli del certificato:
- Per Modalità di autenticazione selezionare Certificato.
- Per Carica certificato caricare il file con estensione p12 appena creato.
- Per Modalità applicazione selezionare la modalità in base alle esigenze.
Al termine dell'immissione di tutte le informazioni, selezionare Salva.
Configurare Xcode
In Xcode passare a Firma e funzionalità.
Aggiungere una funzionalità selezionando + Funzionalità e quindi selezionare Notifiche push.
Aggiungere un'altra funzionalità selezionando + Funzionalità e quindi selezionare Modalità in background.
In Modalità in background selezionare Notifiche remote.
Per Destinazione pod - AzureCore impostare Require Only App-Extension-Safe API (Richiedi solo l'API sicura per l'estensione dell'app) su No.
Implementare le notifiche push
Versione di base
Se si vuole implementare una versione di base delle notifiche push, è necessario registrarsi per le notifiche remote con APN. Fare riferimento al codice di esempio per visualizzare l'implementazione correlata in AppDelegate.swift.
Versione avanzata
Se vuoi implementare una versione avanzata delle notifiche push, devi includere gli elementi seguenti nella tua app. Il motivo è che la crittografia del contenuto del cliente (ad esempio, il contenuto dei messaggi di chat e il nome visualizzato del mittente) nei payload delle notifiche push richiede alcune soluzioni alternative.
Archiviazione dei dati per le chiavi di crittografia
Creare un archivio dati permanente nei dispositivi iOS. Questa risorsa di archiviazione dati deve essere in grado di condividere i dati tra l'app principale e le estensioni dell'app.
Nel codice di esempio per questa esercitazione scegliere Gruppi di app come risorsa di archiviazione dei dati eseguendo queste azioni:
Aggiungere la funzionalità Gruppi di app alle destinazioni dell'app (estensioni principali dell'app e dell'app) seguendo la procedura descritta nell'articolo Apple Aggiunta di funzionalità all'app.
Configurare i gruppi di app seguendo la procedura descritta nell'articolo Apple Configurazione dei gruppi di app. Assicurarsi che l'app principale e le estensioni dell'app abbiano lo stesso nome del contenitore.
Estensione del servizio di notifica
Implementare l'estensione del servizio di notifica in bundle con l'app principale. Questa estensione dell'app viene usata per decrittografare il payload di notifica push quando il dispositivo lo riceve.
Passare a Aggiungere un'estensione dell'app di servizio al progetto nella documentazione di Apple e seguire la procedura.
Passare a Implementare i metodi del gestore dell'estensione nella documentazione di Apple. Apple fornisce il codice predefinito per decrittografare i dati ed è possibile seguire la struttura complessiva per questa esercitazione. Tuttavia, poiché si usa Chat SDK per la decrittografia, è necessario sostituire la parte che inizia da
// Try to decode the encrypted message data
con la logica personalizzata. Fare riferimento al codice di esempio per visualizzare l'implementazione correlata in NotificationService.swift.
Implementazione del protocollo PushNotificationKeyStorage
Il PushNotificationKeyStorage
protocollo è necessario per la versione avanzata delle notifiche push. È possibile usare la classe predefinita AppGroupPushNotificationKeyStorage
fornita da Chat SDK. Se non si usano gruppi di app come risorsa di archiviazione delle chiavi o se si vogliono personalizzare i metodi di archiviazione delle chiavi, creare una classe personalizzata conforme al PushNotificationKeyStorage
protocollo.
PushNotificationKeyStorage
definisce due metodi:
onPersistKey(encryptionKey:expiryTime)
: questo metodo viene usato per rendere persistente la chiave di crittografia nella risorsa di archiviazione del dispositivo iOS dell'utente. Chat SDK imposta 45 minuti come ora di scadenza per la chiave di crittografia. Se si desidera che le notifiche push siano attive per più di 45 minuti, è necessario pianificare unachatClient.startPushNotifications(deviceToken:)
chiamata più frequentemente (ad esempio, ogni 15 minuti) in modo che una nuova chiave di crittografia possa essere registrata prima della scadenza della chiave precedente.onRetrieveKeys() -> [String]
: questo metodo viene usato per recuperare le chiavi valide archiviate in precedenza. Si ha la flessibilità necessaria per offrire la personalizzazione in base all'archiviazione dei dati scelta in precedenza.
Nell'estensione del protocollo, Chat SDK fornisce un'implementazione del decryptPayload(notification:) -> PushNotificationEvent
metodo che è possibile usare. Fare riferimento al codice di esempio per visualizzare l'implementazione correlata in NotificationService.swift.
Testare le notifiche
Creare un thread di chat con l'utente A e l'utente B.
Scaricare il repository GitHub per le app di esempio.
Inserire i valori e di
<ACESS_TOKEN>
User A in AppSettings.plist.<ACS_RESOURCE_ENDPOINT>
Impostare Abilita Bitcode su No per due destinazioni pod: AzureCommunicationChat e Trouter.
Collegare il dispositivo iOS al Mac ed eseguire il programma. Quando viene chiesto di autorizzare le notifiche push nel dispositivo, selezionare Consenti.
Come utente B, inviare un messaggio di chat. Verificare che l'utente A riceva una notifica push nel dispositivo iOS.
Implementare il rinnovo della registrazione
Per consentire a Microsoft di fornire un servizio di chat sicuro, la registrazione per le notifiche push nei dispositivi iOS rimane valida solo per 45 minuti. Per mantenere la funzionalità delle notifiche push, è necessario implementare il rinnovo della registrazione nell'app client.
Questa esercitazione propone due soluzioni allineate alle linee guida ufficiali di Apple. È consigliabile implementare entrambe le soluzioni insieme per aumentarne l'efficacia.
Nota
Vari fattori possono influenzare l'efficacia di una delle due soluzioni. Ad esempio, lo stato della batteria del dispositivo, le condizioni di rete e le restrizioni specifiche di iOS potrebbero influire sulla capacità dell'app di eseguire attività in background. Per altre informazioni, vedi il video Advances in App Background Execution (Avanzamenti nell'esecuzione in background dell'app) e l'articolo Pushing background updates to your app from Apple (Pushing background updates to your app from Apple).
Soluzione 1: Attività in background
Le attività in background offrono un modo per eseguire attività anche quando l'app non è in primo piano. Quando si implementa un'attività in background, l'app può richiedere più tempo per completare un'attività specifica, ad esempio rinnovare la registrazione della notifica push.
Le sezioni seguenti descrivono come usare le attività in background per il rinnovo della registrazione.
Configurare l'aggiornamento automatico dei token di accesso utente
Per garantire l'accesso ininterrotto ai servizi di chat, è necessario mantenere token di accesso utente validi. I token hanno in genere un periodo di validità predefinito di 24 ore, dopo il quale scadono e richiedono il rinnovo. L'implementazione di un meccanismo di aggiornamento automatico garantisce che il token sia valido ogni volta che viene attivata l'applicazione di chat.
Chat SDK semplifica la gestione dei token automatizzando il processo di aggiornamento quando viene implementato un aggiornamento del token di accesso personalizzato. Completare i passaggi seguenti per configurare l'applicazione chat per supportare l'aggiornamento automatico dei token:
Per garantire che l'applicazione di chat mantenga l'accesso utente continuo e sicuro, è necessario implementare un livello di servizio dedicato al rilascio di token. A questo scopo, è possibile usare Funzioni di Azure.
Per creare una funzione di Azure, vedere l'articolo Creare un servizio di accesso utente attendibile usando Funzioni di Azure. Descrive come configurare l'app per le funzioni e distribuire il codice necessario per l'emissione di token.
Dopo aver configurato la funzione di Azure:
Ottenere l'URL dell'autorità di certificazione del token dal portale di Azure. L'applicazione di chat usa questo URL per richiedere nuovi token.
Creare e integrare l'aggiornamento del token all'interno dell'applicazione chat. Questo componente richiede token aggiornati e inizializza il client di chat per il rinnovo automatico dei token senza problemi.
Il codice di esempio per l'aggiornamento del token e la relativa integrazione con il client di chat è disponibile nel repository GitHub per le app di esempio.
Abilitare e pianificare le attività in background
Per attivare e pianificare le attività in background nell'app iOS, seguire la procedura descritta nell'articolo Apple Uso delle attività in background per aggiornare l'app.
Per un'implementazione pratica, vedere il repository GitHub per le app di esempio. L'esempio fornito usa BGProcessingTask
configurato per avviare non prima di un minuto in futuro, dimostrando come recuperare in modo efficiente i dati in background.
Soluzione 2: Notifica remota
Una notifica remota è il meccanismo per le applicazioni iOS per eseguire attività in background in risposta a trigger esterni. È possibile usare le notifiche remote per attività come l'aggiornamento delle registrazioni senza l'intervento dell'utente.
Per usare le notifiche remote per eseguire un'attività in background:
Implementare un meccanismo di attivazione.
Ad esempio, è possibile usare un'app per le funzioni di Azure come meccanismo di attivazione. Consente di eseguire il codice in risposta a vari trigger, incluse le richieste HTTP, quindi è utile per avviare notifiche push invisibile all'utente. Ricordarsi di implementare il Registro di sistema del dispositivo alla fine in modo che l'app per le funzioni sappia dove recapitare le notifiche.
Configurare un hub di notifica.
Il servizio Hub di notifica di Azure offre un'infrastruttura di notifica push scalabile che può inviare notifiche a qualsiasi piattaforma (iOS, Android, Windows e così via) da qualsiasi back-end (cloud o locale).
È possibile riutilizzare lo stesso hub di notifica usato per le normali notifiche push. Per configurare un nuovo, vedere la documentazione di Hub di notifica di Azure.
Configurare l'app per le funzioni di Azure per le notifiche regolari.
Modificare l'app per le funzioni per inviare periodicamente notifiche remote tramite l'hub di notifica. Queste notifiche vengono inoltrate agli APN e indirizzate al dispositivo specificato. Per altre istruzioni, vedere Associazione di output di Hub di notifica per Funzioni di Azure.
Gestire le notifiche nell'app.
Nell'app iOS implementare il metodo dell'istanza dell'applicazione per attivare un aggiornamento automatico della registrazione al momento della ricezione di una notifica invisibile all'utente.
Per altre informazioni, vedere l'articolo apple Configurazione di un server di notifica remoto.