Come fa un dispositivo iOS (iPad o iPhone) ricevere notifiche "push"?

3

Un dispositivo iOS (iPad o iPhone) riceve notifiche, anche quando il dispositivo sta dormendo. Apple chiama queste "notifiche push" .

In che modo il dispositivo riceve queste notifiche? Sono previste azioni periodiche (ricorrenti)? In tal caso, quali azioni sono e quanto spesso si verificano?

    
posta Nicolas Barbulesco 20.03.2016 - 09:54
fonte

2 risposte

5

Dalla documentazione del servizio di notifica push Apple:

Each device establishes an accredited and encrypted IP connection with APNs and receives notifications over this persistent connection.

Questo significa che usa una sorta di connessione persistente basata su socket. Potrebbe essere il suo protocollo proprietario o WebSocket , ecc. Le "azioni periodiche" che stai chiedendo sono di solito implementate in questi protocolli al livello più basso possibile utilizzando i socket TCP / IP e vengono costantemente sottoposti a polling per i nuovi dati sul socket . Una volta che i dati sono stati letti dal socket, viene attivato un evento per eseguire alcune azioni come visualizzare una notifica sul dispositivo.

Per spiegare meglio, il modo in cui i socket funzionano è che il dispositivo effettua una connessione a un server remoto, il server remoto invia dati al dispositivo e viene inserito nel buffer del socket, quindi il dispositivo legge il buffer del socket e fa qualcosa con il dati. Nel momento in cui i dati vengono trasferiti sul dispositivo, il dispositivo li elaborerà. Questo perché il tuo dispositivo sta verificando nuovi dati sul buffer del socket del socket. Prova a leggere i dati e, se riceve dati, li invia per essere processato e quindi prova a leggere di nuovo i dati; se non riceve dati, prova a leggere di nuovo i dati, per sempre. Se la connessione al server remoto viene mai disconnessa, tenta semplicemente di connettersi di nuovo fino a quando non riesce.

La documentazione del codice che ho linkato in precedenza è tratta dalla libreria ASIO di Boost che è ampiamente usato per i socket in C ++. L'implementazione e l'utilizzo possono essere semplificati come segue:

01 start program
02 try to connect to server by using a socket
03 if not connected to server, goto 02
04 try to read data on socket
05 if data was read, process data
06 goto 03

Nel passaggio 03 sopra, il dispositivo sa quando sei offline e non tenterà di connettersi di nuovo fino a quando non torni online (il dispositivo invia un evento quando ti connetti a Internet, quindi accadrà tutto istantaneamente).

Quando nessun dato è stato letto nel passaggio 04 sopra, tenta immediatamente di leggerlo di nuovo senza attendere (supponendo che tu sia ancora connesso al server). Ci vuole una quantità minima di potenza di elaborazione per cercare ripetutamente di leggere i dati sul socket, quindi non c'è bisogno di preoccuparsi della batteria o delle risorse sprecate (vedi la risposta @ malhal qui per una spiegazione migliore su questo e anche su come funziona quando il dispositivo sta dormendo).

    
risposta data 20.03.2016 - 20:05
fonte
2

Sì, la CPU del dispositivo è addormentata, ma il modem cellulare ha un'altra CPU chiamata processore in banda base che continua a funzionare, monitora i pacchetti in arrivo che corrispondono a un determinato filtro e quindi riattiva la CPU utilizzando un interrupt e gli consente di elaborare l'ingresso dati. Questo è un trucco preso dal direct-push Pocket PC di Microsoft, che è stato un miglioramento rispetto all'implementazione di Blackberry che richiedeva un'infrastruttura BB telco-side.

    
risposta data 05.12.2016 - 18:37
fonte

Leggi altre domande sui tag