iOS
Send Push Notifications
Notifiche Push iOS con Cloud Code e Swift su Back4App
27 min
invio di notifiche push utilizzando il codice cloud con swift introduzione questa sezione spiega come puoi inviare notifiche push utilizzando il cloud code tramite back4app ecco come apparirà in qualsiasi momento, puoi accedere al progetto completo costruito con questo tutorial nel nostro https //github com/templates back4app/ios install sdk per completare questo quickstart, hai bisogno di https //developer apple com/xcode/ un'app creata su back4app segui il https //www back4app com/docs/get started/new parse app per imparare a creare un'app parse su back4app un'app ios collegata a back4app nota segui il https //www back4app com/docs/ios/parse swift sdk per creare un progetto xcode collegato a back4app un'app ios configurata tramite https //www back4app com/docs/ios/push notifications/best ios push notification service un dispositivo ios, iphone o ipad, che esegue ios 10 o versioni successive un account sviluppatore apple a pagamento 1 configura la tua app ios per ricevere notifiche push ogni applicazione parse installata su un dispositivo registrato per le notifiche push ha un oggetto associato di installazione installazione l'oggetto installazione installazione è dove memorizzi tutti i dati necessari per indirizzare le notifiche push ad esempio, nella tua app, potresti memorizzare quali squadre interessano uno dei tuoi utenti per inviare aggiornamenti sulle loro prestazioni salvare l'oggetto installazione installazione è anche necessario per tracciare gli eventi di apertura dell'app relativi alle notifiche push il modo più semplice per iniziare a inviare notifiche è utilizzare i canali questo ti consente di utilizzare un modello publisher subscriber per inviare push i dispositivi iniziano iscrivendosi a uno o più canali, e le notifiche possono essere inviate in seguito a questi abbonati i canali a cui si iscrive un dato installazione installazione sono memorizzati nel canali canali campo dell' installazione installazione oggetto dopo di che passeremo all'invio di notifiche push mirate a un singolo utente o a un gruppo di utenti basato su una query andando avanti, presumeremo che tu abbia completato tutti i passaggi del https //www back4app com/docs/ios/push notifications/best ios push notification service , anche se utilizzi il progetto ios costruito con questo tutorial che è disponibile nel nostro https //github com/mpc20001/ios objc push cloud code dovresti avere le notifiche push di base funzionanti e anche essere in grado di inviare notifiche tramite la console di amministrazione 2 iscrivi il tuo dispositivo al canale news per prima cosa, aggiungeremo un canale al tuo oggetto di installazione faremo questo modificando il metodo createinstallationonparse createinstallationonparse nel nostro file app delegate apri il file appdelegate m file appdelegate m , e assicurati che la tua versione di createinstallationonparse createinstallationonparse sia la stessa del codice qui sotto appdelegate swift 1 func createinstallationonparse(devicetokendata\ data){ 2 if let installation = pfinstallation current(){ 3 installation setdevicetokenfrom(devicetokendata) 4 installation setobject(\["news"], forkey "channels") 5 installation saveinbackground { 6 (success bool, error error?) in 7 if (success) { 8 print("you have successfully saved your push installation to back4app!") 9 } else { 10 if let myerror = error{ 11 print("error saving parse installation \\(myerror localizeddescription)") 12 }else{ 13 print("uknown error") 14 } 15 } 16 } 17 } 18 } stiamo aggiungendo una nuova riga di codice ‘installation setobject(\[“news”], forkey “channels”)’ che imposterà l'array dei canali dell'oggetto di installazione per contenere un canale chiamato ‘news’ questo ci permetterà di inviare un messaggio a tutti coloro che si iscrivono al canale chiamato news news tramite codice cloud 2\ provalo eseguendo la tua app su un dispositivo fisico non puoi eseguirlo su un simulatore avrai bisogno di un token push reale per aggiornare il tuo record di installazione, quindi un dispositivo fisico è indispensabile 3\ dopo che è stato eseguito con successo, dovresti vedere qualcosa di simile all'immagine qui sotto nella installazione installazione sezione del tuo dashboard puoi controllarlo andando al dashboard della tua app su https //www back4app com/ e poi controllando la tabella delle installazioni sotto la colonna dei canali dovresti vedere notizie notizie , che ti mostra che sei ora iscritto al canale push notizie canale push notizie 3 crea il tuo cloud code per saperne di più su come iniziare con cloud code guarda https //www back4app com/docs crea un js js file per inserire il tuo cloud code devi chiamarlo main js main js affinché back4app sappia che è qui che memorizzi il tuo codice cloud definisci una funzione cloud, utilizzando parse cloud define parse cloud define , per chiamare la notifica push all'interno della funzione chiameremo parse push send parse push send per inviare un push al canale ‘ news news ’ è necessario utilizzare la chiave master in questa operazione il seguente codice esegue questi passaggi parse server 3 x // main js 1 parse cloud define("pushsample", (request) => { 2 3 return parse push send({ 4 channels \["news"], 5 data { 6 title "hello from the cloud code", 7 alert "back4app rocks!", 8 } 9 }, { usemasterkey true }); 10 }); parse server 2 x //main js 1 parse cloud define("pushsample", function (request, response) { 2 parse push send({ 3 channels \["news"], 4 data { 5 title "hello from the cloud code", 6 alert "back4app rocks!", 7 } 8 }, { 9 success function () { 10 // push was successful 11 response success("push sent"); 12 console log("success push sent"); 13 }, 14 error function (error) { 15 // push was unsucessful 16 response error("error with push " + error); 17 console log("error " + error); 18 }, 19 usemasterkey true 20 }); 21 }) 4 carica su cloud code vai alla tua app su https //www back4app com/ e clicca su dashboard dashboard trova il cloud code cloud code e clicca su funzioni e hosting web funzioni e hosting web dovrebbe apparire così 3\ carica o crea un nuovo file (puoi anche modificare il main js main js file direttamente nel browser) poi, clicca su deploy deploy come mostrato qui 5 chiama il cloud code dalla tua app ios ora, scriveremo del codice per chiamare questa funzione cloud dalla tua app avrai bisogno sia del simulatore che di un dispositivo fisico per completare questo compito chiamerai la funzione cloud dalla tua app in esecuzione nel simulatore e vedrai la notifica apparire sul tuo dispositivo fisico il tuo dispositivo fisico dovrebbe essere effettivamente bloccato con lo schermo di blocco attivo per vedere la notifica una notifica non apparirà sullo schermo se sei all'interno dell'app che la sta inviando quando ricevi la notifica 2\ apri il file viewcontroller swift viewcontroller swift del tuo progetto dobbiamo includere parse nel view controller aggiungendo il seguente codice ‘import parse’ nella parte superiore del file viewcontroller swift https //github com/mpc20001/ios swift push cloud code/blob/master/addingparsesdk/viewcontroller swift#l10 1 import uikit 2 import parse 3\ successivamente nel viewcontroller swift viewcontroller swift file chiameremo una funzione di avviso dal metodo viewdidappear l'avviso ti permetterà di attivare il codice cloud code che invierà una notifica push al tuo dispositivo assicurati di includere il seguente blocco di codice dopo la viewdidload viewdidload funzione viewcontroller swift viewcontroller swift 1 override func viewdidappear( animated bool) { 2 asktosendpushnotifications() 3 } 4 5 func asktosendpushnotifications() { 6 let alertview = uialertcontroller(title "send a push to the news channel", message nil, preferredstyle alert) 7 let okaction = uialertaction(title "ok", style default) { (action\ uialertaction) in 8 self sendpushnotifications() 9 } 10 alertview\ addaction(okaction) 11 let cancelaction = uialertaction(title "cancel", style cancel) { (action\ uialertaction) in 12 } 13 alertview\ addaction(cancelaction) 14 if let presenter = alertview\ popoverpresentationcontroller { 15 presenter sourceview = self view 16 presenter sourcerect = self view\ bounds 17 } 18 self present(alertview, animated true, completion\ nil) 19 } 20 21 func sendpushnotifications() { 22 let cloudparams \[anyhashable\ string] = \[ ] 23 pfcloud callfunction(inbackground "pushsample", withparameters cloudparams, block { 24 (result any?, error error?) > void in 25 if error != nil { 26 if let descrip = error? localizeddescription{ 27 print(descrip) 28 } 29 }else{ 30 print(result as! string) 31 } 32 }) 33 } 4\ esegui la tua app nel simulatore e quando l'avviso chiede di inviare la push appare, premi “ok” sul tuo dispositivo fisico dovresti vedere la push apparire sulla schermata di blocco, come questa 6 chiama il cloud code dall'api rest l'api rest fornisce un modo rapido e semplice per testare se la tua funzione cloud sta funzionando basta utilizzare il codice qui sotto nel tuo terminale o prompt dei comandi clicca su per saperne di più su come iniziare con la riga di comando in https //www digitalocean com/community/tutorials/an introduction to the linux terminal , https //blog teamtreehouse com/introduction to the mac os x command line oppure https //www bleepingcomputer com/tutorials/windows command prompt introduction/ curl x post h "x parse application id your app id here" \\ h "x parse rest api key your rest api key here" \\ h "content type application/json" \\ d ‘{ // metti qui i parametri della funzione in formato json }’ \\ https //parseapi back4app com/functions/pushsample per testare le notifiche push, utilizza semplicemente il codice rest mentre il dispositivo è chiuso 7 invia notifiche push mirate utilizzando un oggetto utente andando avanti, utilizzeremo un progetto ios diverso che ha già funzionalità di registrazione e accesso di base integrate useremo questo progetto ios per mostrarti come rilevare se un utente è connesso e, in tal caso, salvare la loro installazione con un collegamento al loro id oggetto per le query nel codice cloud puoi scaricare il progetto ios completo realizzato con il tutorial di questa sezione dal nostro https //github com/mpc20001/ios objc targeted push cloud code ma dovrai comunque eseguire tutta la configurazione dal tutorial precedente che spiega come inviare notifiche dal dashboard di back4app puoi scaricare il progetto ios completo realizzato con il tutorial di questa sezione dal nostro https //github com/mpc20001/ios swift targeted push cloud code ma dovrai comunque eseguire tutta la configurazione dal tutorial precedente che spiega come inviare notifiche dal dashboard di back4app ottieni la nuova versione dell'app, configura e registrati o accedi all'app prima assicurati di scaricare il modello funzionante dal nostro https //github com/mpc20001/ios swift targeted push cloud code non passeremo attraverso tutti i passaggi per costruire questa app, invece ci concentreremo sulla configurazione del codice cloud e sul perché funziona una volta aperta questa nuova app, assicurati di inserire le credenziali della tua app nel file appdelegate swift appdelegate swift 1 func application( application uiapplication, didfinishlaunchingwithoptions launchoptions \[uiapplicationlaunchoptionskey any]?) > bool { 2 let configuration = parseclientconfiguration { 3 $0 applicationid = "paste your application id here" 4 $0 clientkey = "paste your client id here" 5 $0 server = "https //parseapi back4app com" 6 } 7 parse initialize(with configuration) 8 return true 9 } 2\ questa app ha alcune differenze significative rispetto all'app precedente presenta 2 sezioni, una per essere connessi alla propria app e una sezione quando non si è connessi alla propria app il prossimo grande cambiamento è la funzione ‘createinstallationonparse’ del file appdelegate swift abbiamo aggiunto 1 riga che memorizza l'id oggetto dell'utente come parte dell'oggetto di installazione in questo modo possiamo sapere quale utente è associato a quale oggetto di installazione e possiamo mirare a loro individualmente per le notifiche push appdelegate swift 1 func createinstallationonparse(devicetokendata\ data){ 2 if let installation = pfinstallation current(){ 3 installation setdevicetokenfrom(devicetokendata) 4 installation setobject(\["news"], forkey "channels") 5 if let userid = pfuser current()? objectid { 6 installation setobject(userid, forkey "userid") 7 } 8 installation saveinbackground { 9 (success bool, error error?) in 10 if (success) { 11 print("you have successfully saved your push installation to back4app!") 12 } else { 13 if let myerror = error{ 14 print("error saving parse installation \\(myerror localizeddescription)") 15 }else{ 16 print("uknown error") 17 } 18 } 19 } 20 } 21 } 3\ poiché ora stiamo memorizzando l'id oggetto dell'utente come parte dell'oggetto di installazione, non vogliamo richiedere un nuovo token push finché l'utente non è connesso non vogliamo richiedere un token direttamente dalla funzione ‘application didfinishlaunchingwithoptions’ del file appdelegate swift, invece vogliamo chiamarlo dalla funzione ‘viewdidappear’ del loggedinviewcontroller in ‘viewdidappear’ chiamiamo una funzione sull'appdelegate per richiedere l'accesso a un token di notifica push da apple poiché puoi visualizzare questa sezione solo una volta che sei connesso, possiamo presumere che l'utente sia connesso quando creiamo l'oggetto di installazione, ma solo per essere sicuri abbiamo usato un ‘if let statement’ per estrarre l'oggetto parse currentuser() e recuperare l'id oggetto loggedinviewcontroller swift 1 override func viewdidappear( animated bool) { 2 appdelegate? startpushnotifications() 3 } appdelegate swift 1 if let userid = pfuser current()? objectid { 2 installation setobject(userid, forkey "userid") 3 } 4\ ok, ora, per registrarti o accedere sul tuo dispositivo fisico (iphone o ipad) avvia l'app dovresti vedere l'immagine qui sotto dovresti registrarti per creare un nuovo utente o accedere se hai già creato un utente sulla tua app ecco come apparirà ora dovresti essere in grado di vedere il loggedinviewcontroller dovrebbe apparire così se provi a inviare notifiche a te stesso, non funzionerà ancora perché non abbiamo aggiunto quei metodi al codice cloud quindi, questo è ciò che faremo dopo 8 aggiungi i metodi push mirati al codice cloud apri il tuo main js main js file che hai creato in precedenza e aggiungi le seguenti funzioni per mirare alle installazioni per id utente è necessario utilizzare la chiave master in questa operazione parse server 3 x // main js 1 parse cloud define('sendpushtoyourself', (request) => { 2 let userid = request user id; 3 4 let query = new parse query(parse installation); 5 query equalto("userid", userid); 6 query descending("updatedat"); 7 return parse push send({ 8 where query, 9 data { 10 title "hello from the cloud code", 11 alert "back4app rocks! single message!", 12 } 13 }, { usemasterkey true }); 14 }); 15 16 parse cloud define('sendpushtoallusers', (request) => { 17 let currentuser = request user; 18 let userids = \[currentuser id]; 19 20 let query = new parse query(parse installation); 21 query containedin('userid', userids); 22 return parse push send({ 23 where query, 24 data { 25 title "hello from the cloud code", 26 alert "back4app rocks! group message!", 27 } 28 }, { usemasterkey true }); 29 }); parse server 2 x //main js 1 parse cloud define('sendpushtoyourself', function (request, response) { 2 var currentuser = request user; 3 var userid = currentuser id; 4 5 var query = new parse query("installation"); 6 query equalto("userid", userid); 7 query descending("updatedat"); 8 parse push send({ 9 where query, 10 data { 11 title "hello from the cloud code", 12 alert "back4app rocks! single message!", 13 } 14 }, { 15 usemasterkey true, 16 success function () { 17 response success("success sending a single push!"); 18 }, 19 error function (error) { 20 response error(error code + " " + error description); 21 } 22 }); 23 }); 24 25 parse cloud define('sendpushtoallusers', function (request, response) { 26 var currentuser = request user; 27 var userids = \[currentuser id]; 28 29 var query = new parse query(parse installation); 30 query containedin('userid', userids); 31 parse push send({ 32 where query, 33 data { 34 title "hello from the cloud code", 35 alert "back4app rocks! group message!", 36 } 37 }, { 38 usemasterkey true, 39 success function () { 40 response success('success sending a group push!'); 41 }, 42 error function (message) { 43 response error(error code + " " + error description); 44 } 45 }); 46 }); 9 carica su cloud code vai alla tua app su https //www back4app com/ e clicca su dashboard dashboard trova il cloud code cloud code e clicca su funzioni e web hosting funzioni e web hosting dovrebbe apparire così 3\ carica o crea un nuovo file (puoi anche modificare il file attuale main js main js direttamente nel browser) poi, clicca su deploy deploy come mostrato qui 10 testa che puoi inviare notifiche push mirate a te stesso apri la tua app dal simulatore lasciando il tuo dispositivo fisico chiuso con lo schermo di blocco attivo puoi testare che entrambe le funzioni push funzionano premendo il pulsante ‘invia push a te stesso’ e il pulsante ‘invia push a un gruppo di persone’ dovresti vedere le notifiche apparire sullo schermo di blocco dei tuoi dispositivi considerazioni finali ora dovresti avere una comprensione chiara di come inviare notifiche push basate sul canale di un utente o sull'id oggetto di un utente o su qualsiasi altra query che coinvolga il recupero dell'id oggetto dell'utente ricorda che per memorizzare l'id oggetto dell'utente devi aggiungerlo all'installazione push e richiedere un token push solo quando l'utente è connesso quando invii push tramite query, tieni presente che per impostazione predefinita è limitato a 100 risultati e alcuni utenti potrebbero avere più di un oggetto di installazione inoltre, non è consigliato inviare push a un array di oggetti di installazione che siano più grandi di 100 risultati potrebbe comportare che alcune notifiche non vengano inviate se stai trattando con grandi gruppi di persone, è meglio utilizzare canali o inviare le notifiche in richieste ripetute è fatto! a questo punto, puoi inviare notifiche push utilizzando cloud code tramite back4app! congratulazioni!