iOS
Send Push Notifications
Notifiche push su iOS con CC e Objective-C: guida tecnica
26 min
invio di notifiche push utilizzando il codice cloud con objective c 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 connessa a back4app nota segui il https //www back4app com/docs/ios/parse swift sdk per creare un progetto xcode connesso 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 associato installazione installazione oggetto l' installazione installazione oggetto è 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' installazione installazione oggetto è anche necessario per tracciare gli eventi di apertura dell'app correlati alle 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 successivamente a questi abbonati i canali a cui si iscrive una data installazione installazione sono memorizzati nel campo canali campo canali dell' installazione installazione oggetto dopo di che, passeremo all'invio di notifiche push mirate a un singolo utente o a un gruppo di utenti in base a 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 push 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 nel nostro file app delegate apri il file appdelegate m del tuo progetto e assicurati che la tua versione di didregisterforremotenotificationswithdevicetoken sia la stessa del codice qui sotto stiamo aggiungendo una nuova riga di codice ‘\[currentinstallation setobject @\[@”news1”] 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’ tramite codice cloud appdelegate m \ (void)application (uiapplication )application didregisterforremotenotificationswithdevicetoken (nsdata )devicetoken { // memorizza il devicetoken nell'installazione corrente e salvalo su parse pfinstallation currentinstallation = \[pfinstallation currentinstallation]; \[currentinstallation setdevicetokenfromdata\ devicetoken]; \[currentinstallation setobject @\[@"news1"] forkey @"channels"]; \[currentinstallation saveinbackgroundwithblock ^(bool succeeded, nserror error) { if (!error) { nslog(@"installazione salvata!!!"); }else{ nslog(@"salvataggio installazione fallito %@",error debugdescription); } }]; } 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 dopo che è stato eseguito con successo, dovresti vedere questo nella sezione installazione del tuo dashboard puoi controllare andando al https //www back4app com/ e cliccando sul dashboard della tua app e poi controllando la tabella delle installazioni sotto la colonna dei canali dovresti vedere ‘news’, che ti mostra che ora sei iscritto al canale push news 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’ è 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 successivamente 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 apri il file viewcontroller m del tuo progetto dobbiamo includere parse nel controller della vista aggiungendo il seguente codice ‘#import \<parse/parse h>’ all'inizio del file viewcontroller \#import "viewcontroller h" \#import \<parse/parse h> 3\ successivamente, nel file viewcontroller m chiameremo una funzione di avviso dal metodo viewdidappear l'avviso ti permetterà di attivare il codice cloud che invierà una notifica al tuo dispositivo assicurati di includere il seguente blocco di codice dopo la funzione viewdidload viewcontroller m https //github com/mpc20001/ios objc push cloud code/blob/master/addingparsesdkobjc/appdelegate m#l29 l62 \ (void)viewdidappear (bool)animated { \[self asktosendpushnotifications]; } \ (void)asktosendpushnotifications { uialertcontroller alert = \[uialertcontroller alertcontrollerwithtitle @"invia una notifica al canale notizie" message\ nil preferredstyle\ uialertcontrollerstylealert]; uipopoverpresentationcontroller poppresenter = \[alert popoverpresentationcontroller]; poppresenter sourceview = self view; uialertaction okbutton = \[uialertaction actionwithtitle @"ok" style\ uialertactionstyledefault handler ^(uialertaction action) { \[self sendpushnotifications]; }]; \[alert addaction\ okbutton]; uialertaction cancelbutton = \[uialertaction actionwithtitle @"annulla" style\ uialertactionstylecancel handler ^(uialertaction action) { }]; \[alert addaction\ cancelbutton]; poppresenter sourcerect = self view\ frame; alert modalpresentationstyle = uimodalpresentationpopover; \[self presentviewcontroller\ alert animated\ yes completion\ nil]; } \ (void)sendpushnotifications { \[pfcloud callfunctioninbackground @"pushsample" withparameters @{} block ^(id object, nserror error) { if (!error) { nslog(@"push inviata"); }else{ nslog(@"errore nell'invio del push %@",error localizeddescription); } }]; } 4\ esegui la tua app nel simulatore e quando appare l'avviso che chiede di inviare il push premi “ok” sul tuo dispositivo fisico dovresti vedere il push apparire sulla schermata di blocco 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 o 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, basta utilizzare il codice rest mentre il dispositivo è chiuso 7 invia notifiche push mirate utilizzando un oggetto utente andando avanti, utilizzeremo un diverso progetto ios che ha già funzionalità di registrazione e accesso di base integrate useremo questo progetto ios che possiamo 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 ottieni la nuova versione dell'app configurata e registrati o accedi all'app prima assicurati di scaricare il modello funzionante da github a https //github com/mpc20001/ios objc 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 m appdelegate m \ (bool)application (uiapplication )application didfinishlaunchingwithoptions (nsdictionary )launchoptions { // punto di override per la personalizzazione dopo il lancio dell'applicazione \[parse initializewithconfiguration \[parseclientconfiguration configurationwithblock ^(id\<parsemutableclientconfiguration> configuration) { configuration applicationid = @"inserisci il tuo id app qua"; configuration clientkey = @"inserisci il tuo client id qua"; configuration server = @"https //parseapi back4app com/"; }]]; return yes; } 2\ questa app ha alcune differenze significative rispetto all'app precedente presenta 2 sezioni, una per essere connessi alla tua app e una sezione quando non sei connesso alla tua app la prossima grande modifica è la funzione ‘didregisterforremotenotificationswithdevicetoken’ del file appdelegate m 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 appdelegate m \ (void)application (uiapplication )application didregisterforremotenotificationswithdevicetoken (nsdata )devicetoken { // memorizza il devicetoken nell'installazione corrente e salvalo su parse pfinstallation currentinstallation = \[pfinstallation currentinstallation]; \[currentinstallation setdevicetokenfromdata\ devicetoken]; \[currentinstallation setobject @\[@"news"] forkey @"channels"]; \[currentinstallation setobject\ pfuser currentuser objectid forkey @"userid"]; \[currentinstallation saveinbackgroundwithblock ^(bool succeeded, nserror error) { if (!error) { nslog(@"installazione salvata!!!"); }else{ nslog(@"salvataggio installazione fallito %@",error debugdescription); } }]; } 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 m, 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 assumere che l'utente sia connesso quando creiamo l'oggetto di installazione e recuperiamo l'id oggetto loggedinviewcontroller \ (void)viewdidappear (bool)animated { appdelegate delegate = (appdelegate )\[\[uiapplication sharedapplication] delegate]; \[delegate registerforremotenotifications]; } appdelegate m \[currentinstallation setobject\ pfuser currentuser objectid forkey @"userid"]; 4\ ok, ora per registrarsi 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 file main js 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 il seguente codice esegue questi passaggi 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 nel 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 di 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 questo conclude il tutorial dovresti avere una comprensione solida di come inviare push basati 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, sii consapevole 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 push non vengano inviate se stai trattando con grandi gruppi di persone, è meglio utilizzare canali o inviare le push in richieste ripetute è fatto! a questo punto, puoi inviare notifiche push utilizzando cloud code tramite back4app! congratulazioni!