Notifiche push Tutorial: Guida introduttiva

Aggiornamento Nota: Chuck Krutsinger aggiornato questo tutorial per Xcode 11 e Swift 5. Jack Wu ha scritto il tutorial originale e Keegan Rush ha scritto un aggiornamento precedente.

Gli sviluppatori iOS amano immaginare le persone che usano costantemente la loro fantastica app. Ma, naturalmente, gli utenti a volte dovranno chiudere l’app ed eseguire altre attività. Il bucato non si piega da solo, sai! Fortunatamente, le notifiche push consentono agli sviluppatori di raggiungere gli utenti ed eseguire piccole attività, anche quando gli utenti non utilizzano attivamente un’app! In questo tutorial, imparerai come:

  • Configurare la tua app per ricevere notifiche push.
  • Visualizzarli agli utenti o eseguire altre attività.

Guida introduttiva

Che cosa sono le notifiche push? Sono messaggi inviati alla tua app tramite il servizio di notifica push Apple (APN) anche se la tua app non è in esecuzione o il telefono è inattivo. Per cosa è possibile utilizzare le notifiche push?

  • Visualizza un breve messaggio di testo, chiamato avviso, che richiama l’attenzione su qualcosa di nuovo nella tua app.
  • Riprodurre un suono di notifica.
  • Imposta un numero di badge sull’icona dell’app per far sapere all’utente che ci sono nuovi elementi.
  • Fornire azioni che l’utente può prendere senza aprire l’applicazione.
  • Mostra un allegato multimediale.
  • Tacere, permettendo l’applicazione per eseguire un’attività in background.
  • Raggruppa le notifiche in thread.
  • Modificare o rimuovere le notifiche consegnati.
  • Esegui il codice per modificare la notifica prima di visualizzarla.
  • Visualizza un’interfaccia utente interattiva personalizzata per la notifica.
  • E probabilmente di più.

Questo tutorial copre molti di questi usi per aiutarti a iniziare a creare notifiche push nelle tue app. Per completare questo tutorial, è necessario quanto segue:

  • Xcode 11.4 o successivo. Le versioni precedenti di Xcode non supportano le notifiche push utilizzando il simulatore.
  • Un abbonamento Apple Developer Program per essere in grado di compilare l’applicazione con il diritto notifiche push.
Nota: Più avanti nel tutorial, imparerai come inviare notifiche push a un dispositivo reale nell’invio a un dispositivo reale.

Per inviare e ricevere notifiche push, è necessario eseguire tre attività principali:

  1. Configurare l’app e registrarla con gli APN.
  2. Invia una notifica push da un server a dispositivi specifici tramite APN. Lo simulerai con Xcode.
  3. Utilizzare callback in app per ricevere e gestire le notifiche push.

L’invio di notifiche push è una responsabilità del componente server della tua app. Molte app utilizzano terze parti per inviare notifiche push. Altri usano soluzioni personalizzate o librerie popolari (come Houston). Potrai solo toccare l’invio di messaggi push in questo tutorial, in modo da essere sicuri di controllare il Dove andare Da qui? sezione per costruire sulla vostra conoscenza delle notifiche push.

Per iniziare, scarica il progetto WenderCast starter utilizzando il pulsante Scarica materiali nella parte superiore o inferiore di questo tutorial. WenderCast è di tutti go-to fonte per raywenderlich.com podcast e ultime notizie.

Nella cartella iniziale, apri WenderCast.xcodeproj. Selezionare WenderCast nel navigatore progetto, quindi selezionare la destinazione WenderCast. Nella scheda Generale & Capacità, selezionare il team di sviluppo. Costruire ed eseguire in un simulatore.

Crea ed esegui il progetto iniziale

WenderCast visualizza un elenco di raywenderlich.com podcast e consente agli utenti di riprodurli. Ma non consente agli utenti di sapere quando è disponibile un nuovo podcast e la scheda News è vuota! Presto risolverai questi problemi con la potenza delle notifiche push.

Invio e ricezione di notifiche push

Configurazione dell’app

La sicurezza è molto importante per le notifiche push. Non vuoi che nessun altro invii notifiche push ai tuoi utenti tramite la tua app. Dovrai eseguire diverse attività per configurare la tua app per ricevere in modo sicuro le notifiche push.

Abilitando il servizio di notifica push

In primo luogo, è necessario modificare l’identificatore del bundle. In Xcode, evidenziare WenderCast nel navigatore progetto, quindi selezionare la destinazione WenderCast. Seleziona Generale, quindi cambia l’identificatore del bundle in qualcosa di unico in modo che il server di notifica push di Apple possa indirizzare i push a questa app.

Modificare l'identificatore bundle

Successivamente, è necessario creare un ID app nel proprio account sviluppatore e abilitare il diritto di notifica push. Xcode ha un modo semplice per farlo:con il target WenderCast ancora selezionato, fai clic sulla scheda Signing & Capabilities e quindi fai clic sul pulsante + Capability. Digitare “push” nel campo filtro e premere Invio.

Aggiungi la funzionalità delle notifiche push

Dopo aver aggiunto il diritto alle notifiche push, il tuo progetto dovrebbe essere simile a questo:

Progetto con diritto alle notifiche push

Nota: se si verificano problemi, visitare l’Apple Developer Center. Potrebbe essere necessario accettare una nuova licenza per sviluppatori, che Apple ama aggiornare, e riprovare.

Dietro le quinte, questo crea l’ID app e quindi aggiunge il diritto alle notifiche push ad esso. Puoi accedere all’Apple Developer Center per verificare questo:

Configurazione dell'ID app che mostra il diritto alle notifiche push

Per ora è tutto ciò che devi configurare. Sei pronto per iniziare a migliorare l’app.

Chiedere il permesso di notifiche utente

Ci sono due passi da fare per registrarsi per le notifiche push. In primo luogo, è necessario ottenere il permesso dell’utente per mostrare le notifiche. Quindi, è possibile registrare il dispositivo per ricevere notifiche remote (push). Se tutto va bene, il sistema ti fornirà un token del dispositivo, che puoi pensare come un “indirizzo” per questo dispositivo.

In WenderCast, ti registrerai per le notifiche push subito dopo il lancio dell’app. Chiedi prima le autorizzazioni utente.

Apri AppDelegate.swift e aggiungere quanto segue nella parte superiore del file:

import UserNotifications

Quindi, aggiungi il seguente metodo alla fine di AppDelegate:

func registerForPushNotifications() { //1 UNUserNotificationCenter.current() //2 .requestAuthorization(options: ) { granted, _ in //3 print("Permission granted: \(granted)") }}

Cosa fa questo codice:

  1. UNUserNotificationCenter gestisce tutte le attività relative alle notifiche nell’app, incluse le notifiche push.
  2. Invochi requestAuthorization(options:completionHandler:) per (hai indovinato) richiedere l’autorizzazione per mostrare le notifiche. Il options passato indica i tipi di notifiche che desideri utilizzare per la tua app: qui stai richiedendo avviso, suono e badge.
  3. Il gestore di completamento riceve un Bool che indica se l’autorizzazione ha avuto successo. In questo caso, è sufficiente stampare il risultato.
Nota: Le opzioni passate a requestAuthorization(options:completionHandler:)possono includere qualsiasi combinazione diUNAuthorizationOptions:

  • .badge: visualizza un numero nell’angolo dell’icona dell’app.
  • .suono: riprodurre un suono.
  • .avviso: visualizza una notifica di testo.
  • .CarPlay: Visualizzare le notifiche in CarPlay.
  • .provvisorio: inviare notifiche senza interruzione. L’utente non riceverà una richiesta di autorizzazione se si utilizza solo questa opzione, ma le notifiche verranno visualizzate solo silenziosamente nel Centro notifiche.
  • .providesAppNotificationSettings: indica che l’app ha la propria interfaccia utente per le impostazioni di notifica.
  • .criticalAlert: Ignorare l’interruttore mute e Non disturbare. Avrai bisogno di un diritto speciale da parte di Apple per utilizzare questa opzione, perché è pensata solo per casi d’uso molto speciali.

Aggiungi quanto segue alla fine diapplication(_:didFinishLaunchingWithOptions:), appena prima direturn:

registerForPushNotifications()

Chiamata registerForPushNotifications() qui assicura l’applicazione tenterà di registrarsi per le notifiche push ogni volta che viene lanciato.

Crea ed esegui. Quando l’applicazione si avvia, si dovrebbe ricevere un prompt che chiede il permesso di inviare notifiche.

Richiesta di notifiche

Toccare Consenti e poof! L’applicazione può ora visualizzare le notifiche. Forte! Ma cosa succede se l’utente rifiuta le autorizzazioni? Aggiungi questo metodo all’interno di AppDelegate:

func getNotificationSettings() { UNUserNotificationCenter.current().getNotificationSettings { settings in print("Notification settings: \(settings)") }}

In primo luogo, è stato specificato le impostazioni desiderate. Questo metodo restituisce le impostazioni concesse dall’utente. Per ora, li stai stampando, ma tornerai qui a breve per fare di più con questo.

InregisterForPushNotifications(), sostituire la chiamata arequestAuthorization(options:completionHandler:)con quanto segue:

UNUserNotificationCenter.current() .requestAuthorization( options: ) { granted, _ in print("Permission granted: \(granted)") guard granted else { return } self?.getNotificationSettings() }

È stata aggiunta una chiamata agetNotificationSettings() nel gestore di completamento. Questo è importante perché l’utente può, in qualsiasi momento, accedere all’app Impostazioni e modificare le autorizzazioni di notifica. guard evita di effettuare questa chiamata nei casi in cui l’autorizzazione non è stata concessa.

Registrazione con APN

Ora che hai le autorizzazioni, ti registrerai per le notifiche remote!

getNotificationSettings(), aggiungere il seguente sotto il print all’interno di chiusura:

guard settings.authorizationStatus == .authorized else { return }DispatchQueue.main.async { UIApplication.shared.registerForRemoteNotifications()}

Qui, si verifica l’ authorizationStatus.authorized: L’utente ha concesso di notifica delle autorizzazioni. In tal caso, si chiama UIApplication.shared.registerForRemoteNotifications() per avviare la registrazione con il servizio di notifica push Apple. È necessario chiamare questo sul thread principale, o riceverai un avviso di runtime.

Aggiungi quanto segue alla fine diAppDelegate:

func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) } let token = tokenParts.joined() print("Device Token: \(token)")}

Questo metodo viene chiamato da iOS ogni volta che una chiamata aregisterForRemoteNotifications() riesce. Il codice può sembrare criptico, ma sta semplicemente prendendo un deviceToken ricevuto e convertendolo in una stringa. Il token del dispositivo è il frutto di questo processo. E ‘ fornito da APN e identifica in modo univoco questa applicazione su questo particolare dispositivo.

Quando si invia una notifica push, il server utilizza token come “indirizzi” per consegnare ai dispositivi corretti. Nella tua app, ora invierai questo token al tuo server per salvarlo e utilizzarlo in seguito per inviare notifiche.

Ora aggiungi quanto segue:

func application( _ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { print("Failed to register: \(error)")}

Questo metodo viene chiamato da iOS seregisterForRemoteNotifications() fallisce. Stai solo stampando l’errore per ora.

Questo è tutto! Costruire ed eseguire. Poiché sei su un simulatore, vedrai un erroreFailed to register. Puoi ignorarlo per ora. Successivamente, quando si esegue su un dispositivo reale, è necessario ricevere un token nell’output della console. Ecco un esempio:

Esempio di token dispositivo

Nota: ci sono diversi motivi per cui la registrazione potrebbe non riuscire. Molto spesso, è perché l’ID app non è stato configurato correttamente. Il messaggio di errore in genere fornisce un buon suggerimento per ciò che è sbagliato.

Invio di una notifica push simulata

Utilizzare un editor di testo per creare un file chiamato prima.apn, che passerai all’utilità simctl di Xcode. Incolla il seguente testo JSON e salva il file.

{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

La struttura di questo JSON sarà spiegata nella prossima sezione. Pazienza, cavalletta.

Crea ed esegui nuovamente l’app sul simulatore, quindi esegui lo sfondo dell’app o blocca il dispositivo. L’applicazione non è ancora in grado di elaborare le notifiche push, mentre in primo piano.

Per utilizzare simctl, è necessario conoscere l’identificatore del dispositivo per il simulatore in cui si sta eseguendo l’app. Se nel simulatore è in esecuzione un solo dispositivo, è possibile utilizzare booted anziché un identificatore. Per ottenere l’identificatore, in Xcode, seleziona Windows ▸ Dispositivi e simulatori, quindi seleziona la scheda Simulatori in alto e seleziona il simulatore che stai utilizzando dall’elenco a sinistra. Usa il mouse per copiare l’identificatore. Potrebbe essere necessario allargare la finestra di dialogo per vederlo completamente.

Trovare l'identificatore del dispositivo in Xcode

Aprire l’app Terminal e passare alla directory in cui è stato salvato per primo.apn. Quindi digitare il seguente comando utilizzando l’identificatore di dispositivo avviato o da Xcode al posto di device_identifier: xcrun simctl push device_identifier bundle_identifier first.apn. Sostituisci device_identifiercon l’identificatore del dispositivo copiato da Xcode e sostituisci bundle_identifier con l’identificatore del bundle dell’app, quello utilizzato quando hai impostato per la prima volta il progetto. Ecco un esempio:

Usando xcrun simctl per inviare una notifica push dal terminale

Esegui il comando e vedrai apparire la notifica push sul simulatore!

Notifica push appare sul simulatore

Toccare la notifica per avviare l’applicazione.

App lanciata dalla notifica push

Non è bello? :]

Guardando una Base di Notifica Push

Prima di passare alla gestione delle notifiche push, date un’occhiata al corpo della notifica di aver inviato:

{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

Il payload è un JSON dizionario che contiene almeno un elemento, aps, che è anche un dizionario. In questo esempio,aps contiene i campialertsound elink_url. Quando il dispositivo riceve questa notifica push, mostra una vista di avviso con il testo ” Breaking News!”e riproduce l’effetto sonoro standard.

link_url è in realtà un campo personalizzato. Puoi aggiungere campi personalizzati al payload in questo modo e verranno consegnati alla tua applicazione. Poiché non lo stai ancora gestendo all’interno dell’app, questa coppia chiave/valore attualmente non fa nulla.

Correzione: Un lettore astuto ha sottolineato che la documentazione di Apple afferma che il contenuto personalizzato come link_urldovrebbe essere a livello peer alla voce del dizionarioaps piuttosto che all’interno di esso. Funziona ancora se lo si inserisce all’interno, ma suggeriamo sempre di aderire alla documentazione di Apple e correggerà questo nel nostro prossimo aggiornamento a questo tutorial.

Ci sono otto chiavi incorporate che puoi aggiungere al dizionarioaps (vedi il riferimento ufficiale della chiave del Payload per ulteriori informazioni):

  • alert: Questa può essere una stringa, come nell’esempio precedente, o un dizionario. Come dizionario, può localizzare il testo o modificare altri aspetti della notifica.
  • badge: Questo è un numero che verrà visualizzato nell’angolo dell’icona dell’app. È possibile rimuovere il badge impostando questo su 0.
  • suono: Nome del file di un suono di notifica personalizzato che si trova nell’app. Questi devono essere più brevi di 30 secondi.
  • thread-id: usa questo tasto per raggruppare le notifiche.
  • categoria: definisce la categoria della notifica, che viene utilizzata per mostrare azioni personalizzate sulla notifica. Esplorerai questo a breve.
  • content-available: Impostando questo tasto su 1, la notifica push diventa silenziosa. Scoprirai questo nella sezione Notifiche push silenziose qui sotto.
  • mutable-content: Impostando questa chiave su 1, la tua app può modificare la notifica prima di visualizzarla.
  • target-content-id: Questo è l’identificatore della finestra portata avanti.

Al di fuori di questi, è possibile aggiungere tutti i dati personalizzati che si desidera, purché il carico utile non superi i 4.096 byte.

Una volta che hai avuto abbastanza divertimento provare queste opzioni e l’invio di notifiche push al simulatore, passare alla sezione successiva!

Gestione delle notifiche push

In questa sezione, imparerai come eseguire azioni quando la tua app riceve notifiche e quando gli utenti le toccano.

Capire cosa succede quando si riceve una notifica push

Quando la tua app riceve una notifica push, iOS chiama un metodo inUIApplicationDelegate.

Dovrai gestire una notifica in modo diverso a seconda dello stato in cui si trova la tua app quando viene ricevuta la notifica:

  • Se la tua app non era in esecuzione e l’utente la avvia toccando la notifica push, iOS passa la notifica alla tua app nellaunchOptionsdiapplication(_:didFinishLaunchingWithOptions:).
  • Se la tua app era in esecuzione in primo piano o in background, il sistema avvisa la tua app chiamando application(_:didReceiveRemoteNotification:fetchCompletionHandler:). Quando l’utente apre l’app toccando la notifica push, iOS può chiamare nuovamente questo metodo, in modo da poter aggiornare l’interfaccia utente e visualizzare le informazioni pertinenti.

Nel primo caso, WenderCast creerà la notizia e si aprirà direttamente alla scheda Notizie. In AppDelegate.swift, aggiungi il seguente codice alla fine di application(_:didFinishLaunchingWithOptions:), appena prima dell’istruzione return:

// Check if launched from notificationlet notificationOption = launchOptions?// 1if let notification = notificationOption as? , let aps = notification as? { // 2 NewsItem.makeNewsItem(aps) // 3 (window?.rootViewController as? UITabBarController)?.selectedIndex = 1}

Questo è quello che stai facendo:

  1. Controlla se il valore per UIApplication.LaunchOptionsKey.remoteNotification esiste in launchOptions. Se lo fa, la tua app è stata lanciata da una notifica. Questo conterrà il payload di notifica push che hai inviato.
  2. Poiché ilaps dizionario esiste, creare unNewsItem con esso.
  3. Cambia la scheda selezionata del controller tab nella sezione Notizie.

Per testare questo, è necessario modificare lo schema di WenderCast. Innanzitutto, crea ed esegui per installare il codice più recente sul simulatore. Quindi, fare clic sullo schema WenderCast e selezionare Modifica schema…:

Modifica il Regime

Selezionare Esegui dal menu laterale, quindi nella scheda Info selezionare in Attesa eseguibile da lanciare:

Scegliere di attendere l'eseguibile da lanciare

Questa opzione farà in modo che il debugger attendere che l’applicazione per essere lanciato per la prima volta dopo l’installazione di allegare ad esso.

Crea ed esegui. Una volta terminata l’installazione, invia altre ultime notizie usando come prima. Toccare la notifica, e l’applicazione si aprirà alle notizie:

App aperta per la scheda news

Per gestire la situazione in cui l’applicazione è in esecuzione quando una notifica push è ricevuto, aggiungere il seguente AppDelegate:

func application( _ application: UIApplication, didReceiveRemoteNotification userInfo: , fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { guard let aps = userInfo as? else { completionHandler(.failed) return } NewsItem.makeNewsItem(aps)}

in Questo modo si cerca di estrarre l’aps fornito userInfo oggetto e, in caso di successo, crea un nuovo NewsItem da esso.

Poiché iOS chiama questo metodo quando l’app è in esecuzione, è necessario modificare lo schema per avviare automaticamente l’app per testarlo. Nell’editor schema, in Avvia, selezionare Automaticamente.

Crea ed esegui. Mantenere l’applicazione in esecuzione in primo piano e nella scheda Notizie. Invia un’altra notifica push di notizie e guarda come appare nel feed:

Seconda notifica push mostrata nella scheda news

Il gioco è fatto! La tua app ora può ricevere magicamente le ultime notizie mentre accade. :]

Nota: Le notifiche push non sono garantiti per arrivare. Questo è OK per WenderCast, perché avere l’elenco completo delle notizie non è troppo importante per questa applicazione. In generale, però, non si dovrebbe usare le notifiche push come l’unico modo di fornire contenuti. Invece, le notifiche push dovrebbero segnalare che sono disponibili nuovi contenuti e consentire all’app di scaricare il contenuto dall’origine (ad esempio, da un’API REST).

Lavorare con le notifiche attuabili

Le notifiche attuabili consentono di aggiungere pulsanti personalizzati alla notifica stessa. Potreste aver notato questo sulle notifiche e-mail o Tweet che consentono di “rispondere” o “preferito” sul posto.

La tua app può definire notifiche utilizzabili quando ti registri per le notifiche utilizzando le categorie. Ogni categoria di notifica può avere alcune azioni personalizzate preimpostate.

Una volta registrato, il server può impostare la categoria di una notifica push. Le azioni corrispondenti saranno disponibili per l’utente una volta ricevute.

Per WenderCast, definirai una categoria di notizie con un’azione personalizzata denominata View. Questa azione consentirà agli utenti di visualizzare l’articolo di notizie nell’app se lo desiderano.

In registerForPushNotifications(), inserire quanto segue appena sotto la guardia e sopra la chiamata a getNotificationSettings():

// 1let viewAction = UNNotificationAction( identifier: Identifiers.viewAction, title: "View", options: )// 2let newsCategory = UNNotificationCategory( identifier: Identifiers.newsCategory, actions: , intentIdentifiers: , options: )// 3UNUserNotificationCenter.current().setNotificationCategories()

Passando attraverso questo, passo dopo passo:

  1. Crea una nuova azione di notifica, con la vista titolo sul pulsante, che apre l’app in primo piano quando viene attivata. L’azione ha un identificatore distinto, che iOS utilizza per distinguere tra altre azioni sulla stessa notifica.
  2. Definire la categoria news, che conterrà l’azione view. Questo ha anche un identificatore distinto che il payload dovrà contenere per specificare che la notifica push appartiene a questa categoria.
  3. Registrare la nuova notifica attuabile chiamando setNotificationCategories.

Crea ed esegui l’app per registrare le nuove impostazioni di notifica.

in Background l’app e poi inviare il seguente payload tramite il xcrun simctl utilità:

{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com", "category": "NEWS_CATEGORY" }}

Quando la notifica viene visualizzata, tirare verso il basso per rivelare la Vista in azione:

notifica Push con l'azione vista rivelato

Bello! Toccando Vista lancerà WenderCast, ma non fa nulla di eccitante appena ancora. Per farlo visualizzare la notizia, è necessario fare un po ‘ più di gestione degli eventi nel delegato.

Gestione delle azioni di notifica

Ogni volta che viene attivata un’azione di notifica,UNUserNotificationCenter informa il suo delegato. Torna in AppDelegate.swift, aggiungi la seguente estensione di classe nella parte inferiore del file:

// MARK: - UNUserNotificationCenterDelegateextension AppDelegate: UNUserNotificationCenterDelegate { func userNotificationCenter( _ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void ) { // 1 let userInfo = response.notification.request.content.userInfo // 2 if let aps = userInfo as? , let newsItem = NewsItem.makeNewsItem(aps) { (window?.rootViewController as? UITabBarController)?.selectedIndex = 1 // 3 if response.actionIdentifier == Identifiers.viewAction, let url = URL(string: newsItem.link) { let safari = SFSafariViewController(url: url) window?.rootViewController? .present(safari, animated: true, completion: nil) } } // 4 completionHandler() }}

Questo è il callback che ottieni quando l’app si apre a causa di un’azione personalizzata. Potrebbe sembrare che ci sia molto da fare, ma non c’è molto di nuovo qui:

  1. Ottieni il dizionario userInfo.
  2. Creare unNewsItem dalaps dizionario e passare alla scheda Notizie.
  3. Controllare il actionIdentifier. Se è l’azione” Visualizza “e il collegamento è un URL valido, visualizza il collegamento in un SFSafariViewController.
  4. Chiama il gestore di completamento che il sistema ti passa.

C’è un ultimo bit: devi impostare il delegato su UNUserNotificationCenter. Aggiungi questa riga all’inizio diapplication(_:didFinishLaunchingWithOptions:):

UNUserNotificationCenter.current().delegate = self

Crea ed esegui. Chiudi di nuovo l’app, quindi invia un’altra notifica di notizie con il seguente payload:

{ "aps": { "alert": "New Posts!", "sound": "default", "link_url": "https://raywenderlich.com", "category": "NEWS_CATEGORY" }}

Abbassa la notifica e tocca l’azione Visualizza, e vedrai WenderCast presentare un controller di visualizzazione Safari subito dopo l’avvio:

URL del collegamento di notifica aperto in una vista Safari

Congratulazioni,! Invia un paio di più e provare ad aprire la notifica in modi diversi per vedere come si comporta.

Invio a un dispositivo reale

Se non vuoi inviare notifiche push a un dispositivo reale o non hai ancora bisogno di notifiche push silenziose, puoi saltare questa sezione e andare a Dove andare Da qui?

Tuttavia, se si desidera avere un’idea di come inviare notifiche push a un dispositivo reale e provare silent push, è necessario eseguire alcune impostazioni aggiuntive. Scarica l’utilità PushNotifications. Potrai utilizzare questa applicazione di utilità per inviare notifiche a un dispositivo reale. Per installarlo, seguire le istruzioni sotto Come installare. Presta particolare attenzione a come aprire l’app perché dovrai modificare alcune impostazioni per eseguire questa utility.

Vai all’Apple Developer Member Center e accedi.

L’invio di notifiche push richiede una chiave di autenticazione. Nel centro membri, selezionare Certificati, identificatori& Profili, quindi trovare le chiavi nel riquadro di sinistra. A destra del titolo dei tasti c’è un pulsante+. Fare clic su di esso per creare una nuova chiave.

Assegnare alla chiave un nome, ad esempio la chiave di notifica push. In Servizi chiave, selezionare Servizio notifiche push Apple (APN).

Esempio push notification key

Fare clic su Continua e quindi Registrarsi nella schermata successiva per creare la nuova chiave. Tocca Scarica. Il file scaricato avrà un nome simile a AuthKey_4SVKWF966R. p8. Tieni traccia di questo file-ne avrai bisogno per inviare le notifiche! La parte 4SVKWF966R del nome del file è l’ID della chiave. Avrai anche bisogno di questo.

L’ultimo pezzo di cui hai bisogno è il tuo ID squadra. Passare alla pagina dei dettagli di appartenenza del centro membri per trovarlo.

Ce l’hai fatta! Con la tua nuova chiave, ora sei pronto per inviare la tua prima notifica push! Ti serve solo un’altra cosa.

Esegui l’app sul tuo dispositivo reale e copia il token del dispositivo dalla console debugger e fallo pronto.

Avvia PushNotifications e completa i seguenti passaggi:

  1. In Autenticazione, seleziona Token.
  2. Fare clic sul pulsante Seleziona P8 e selezionare il .file p8 dalla sezione precedente.
  3. Inserisci il tuo ID chiave e ID squadra nei campi pertinenti.
  4. In Body, inserisci l’ID bundle della tua app e il token del tuo dispositivo.
  5. Cambia il corpo della richiesta in modo che assomigli a questo:
{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

Fai clic sul pulsante Invia in PushNotifications.

notifiche Push tester

Si dovrebbe ricevere notifiche push:

il Tuo Primo Notifica Push

Risoluzione di Problemi Comuni

Qui ci sono un paio di problemi che si potrebbero incontrare:

  • Alcuni arrivano le notifiche, ma non è tutto: Se si sta inviando molte le notifiche push contemporaneamente, ma viene visualizzato solo un paio, non abbiate paura! Questo è di progettazione. APN mantiene un QoS (Qualità del servizio) coda per ogni dispositivo. La dimensione di questa coda è 1, quindi se invii più notifiche, l’ultima notifica viene sovrascritta.
  • Problema di connessione al servizio di notifica push: Una possibilità potrebbe essere che ci sia un firewall che blocca le porte utilizzate dagli APN. Assicurati di sbloccare queste porte.

Utilizzando le notifiche push silenziose

Le notifiche push silenziose possono riattivare l’app in silenzio per eseguire alcune attività in background. WenderCast può utilizzare questa funzione per aggiornare tranquillamente l’elenco dei podcast.

Con un componente server appropriato questo può essere molto efficiente. La tua app non avrà bisogno di eseguire costantemente il polling per i dati. È possibile inviare una notifica push silenziosa ogni volta che sono disponibili nuovi dati.

Per iniziare, selezionare nuovamente il target WenderCast. Ora fai clic sulla scheda Firma & Funzionalità e aggiungi la funzionalità Modalità sfondo. Quindi controlla l’opzione Notifiche remote:

Controlla l'opzione notifiche remote per il diritto alle modalità in background

Ora, la tua app si sveglierà in background quando riceverà una di queste notifiche push.

In AppDelegate.swift, trova application(_:didReceiveRemoteNotification:fetchCompletionHandler:). Sostituire la chiamata aNewsItem.makeNewsItem() con quanto segue:

// 1if aps as? Int == 1 { let podcastStore = PodcastStore.sharedStore // 2 podcastStore.refreshItems { didLoadNewItems in // 3 completionHandler(didLoadNewItems ? .newData : .noData) }} else { // 4 NewsItem.makeNewsItem(aps) completionHandler(.newData)}

Andando oltre il codice:

  1. Si controlla per vedere secontent-available è impostato su 1. Se è così, questa è una notifica silenziosa.
  2. Si aggiorna l’elenco dei podcast, che è una chiamata di rete asincrona.
  3. Al termine dell’aggiornamento, chiamare il gestore di completamento per far sapere al sistema se l’app ha caricato nuovi dati.
  4. Se non si tratta di una notifica silenziosa, allora è una notizia, in modo da fare una notizia.

Assicurati di chiamare il gestore di completamento con il risultato onesto. Il sistema misura il consumo della batteria e il tempo che la tua app utilizza in background e potrebbe limitare la tua app, se necessario.

Questo è tutto quello che c’è da fare. Per testarlo, costruire ed eseguire, in primo piano l’applicazione e spingere il seguente payload tramite l’utilità PushNotifications:

{ "aps": { "content-available": 1 }}

Se tutto va bene, non dovrebbe accadere nulla, a meno che non sia stato appena aggiunto un nuovo podcast al database remoto. Per confermare che il codice è stato eseguito come previsto, impostare un punto di interruzione in application(_:didReceiveRemoteNotification:fetchCompletionHandler:) e passare attraverso di esso dopo l’invio della notifica.

Dove andare da qui?

Congratulazioni! Hai completato questo tutorial e reso WenderCast un’applicazione completa con notifiche push!

È possibile scaricare il progetto completato utilizzando il pulsante Scarica materiali nella parte superiore o inferiore di questo tutorial.

Vuoi approfondire tutto ciò che puoi fare con le notifiche push, come la creazione di interfacce utente personalizzate e l’invio di avvisi critici? Le nostre notifiche push di Tutorial libro vi insegnerà le funzionalità avanzate di notifiche push.

Un’altra risorsa è il tutorial sulle notifiche push per iOS: Rich Push Notifications tutorial.

Anche se le notifiche push sono una parte importante delle app moderne, è anche molto comune che gli utenti rifiutino le autorizzazioni per la tua app se esageri con le notifiche. Ma con un design accurato, le notifiche push possono far tornare i tuoi utenti alla tua app ancora e ancora!

Cute cat notification bell

Questo gatto ha ricevuto una notifica push che la sua cena era pronta!

Spero che ti sia piaciuto questo tutorial sulle notifiche push. Se avete domande, sentitevi liberi di lasciarli nel forum di discussione qui sotto.

raywenderlich.com Settimanale

Il raywenderlich.com newsletter è il modo più semplice per rimanere up-to-date su tutto quello che c’è da sapere come uno sviluppatore mobile.

Ottieni un digest settimanale dei nostri tutorial e corsi e ricevi un corso e-mail approfondito gratuito come bonus!

Valutazione media

4.9 / 5

Aggiungi una valutazione per questo contenuto

Accedi per aggiungere una valutazione

17 valutazioni

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *