2015-08-21 11 views
11

Secondo la documentazione ufficiale di Apple, APNS (Apple Push Notification Service) memorizza solo l'ultima notifica se il dispositivo è offline.In che modo WhatsApp riceve più notifiche quando APNS ne memorizza solo una nel caso in cui il dispositivo sia offline?

Il servizio di notifica push Apple include un componente di qualità del servizio (QoS) predefinito che esegue una funzione store-and-forward. Se gli APN tentano di recapitare una notifica ma il dispositivo è offline, la QoS memorizza la notifica. Conserva una sola notifica per l'applicazione su un dispositivo: l'ultima notifica ricevuta da un provider per l'applicazione. Quando il dispositivo offline in seguito si riconnette, il QoS inoltra la notifica memorizzata al dispositivo. La QoS conserva una notifica per un periodo limitato prima di eliminare .

Quindi come fanno le app come Whatsapp a inviare messaggi da più utenti quando il dispositivo è in linea? Questi messaggi sarebbero stati ricevuti come notifica separata se il dispositivo era online.

+0

solo curioso, visto che non sono un utente di Whatsapp, cosa succede esattamente quando il dispositivo si accende: anche se non si esegue l'app in questione si ottiene tutta la notifica mancante che avrebbe dovuto essere inviata durante il periodo di spegnimento? – tomsoft

risposta

6

Sembra come se ci fosse un aggiornamento per questo problema su iOS 8 che permetterà la vostra applicazione di svegliarsi in background a causa di spingere anche se l'utente ha ucciso manualmente. Controlla questo: Wake your app in the background using PushKit in iOS8.

Ciò significa che è possibile inviare notifiche all'app e una volta ricollegata, verrà riattivata dal sistema operativo e sarà in grado di comunicare con il server. Quindi, è possibile implementare la logica per inviare tutti i messaggi push persi mentre il dispositivo era offline.

Devo ammettere che devo ancora provarlo da solo, ma sembra che questa potrebbe essere la soluzione al problema che stai descrivendo.

+0

Questa è la spiegazione più probabile. Poiché WhatsApp dispone anche di una funzionalità VoIP, possono utilizzare le nuove notifiche push VoIP PushKit, che riattivano l'app, anche se è stata interrotta forzatamente. Quindi, WhatsApp può sincronizzare tutti i messaggi non letti e mostrarli come notifiche locali. Ancora, mi chiedo, per quanto tempo le notifiche push VoIP sono memorizzate, quando il dispositivo è offline, dal momento che ricevere una notifica per una chiamata VoIP che è stata avviata ore fa non ha senso per me. –

+0

@Rony Rozen puoi spiegarlo "puoi inviare notifiche alla tua app" come possiamo renderlo possibile. –

+0

È una vecchia risposta, ma probabilmente dovresti rispondere alla risposta collegata. In particolare, questo tutorial può essere utile: https://zeropush.com/guide/guide-to-pushkit-and-voip –

2

Dal momento che ogni notifica inviare mentre il dispositivo è collegato in modo efficace sovrascrive quello esistente, ci sono due modi per andare su questo:

  • includere tutti i messaggi che il dispositivo non conosce ancora in ogni notifica (quindi sostituisci una notifica che contiene il messaggio A con una che contiene sia il messaggio A che B). Potresti imbatterti in un limite di dimensioni massime ad un certo punto.

  • Non includere affatto i messaggi effettivi nelle notifiche. Quando l'applicazione riceve la notifica, può chiedere al server nuovi messaggi.

+1

Nel primo caso come sarebbe il server a sapere se la notifica precedente è stata consegnata o meno (per includere il messaggio precedente nella nuova notifica) – crysis

+0

La prossima volta che l'applicazione può comunicare con il server, può notificare al server che ha ricevuto il push- notifica con i messaggi A e B. Il server deve tenere traccia di quali messaggi sono stati recuperati/riconosciuti dal client. A meno che le notifiche push Apple utilizzino un canale di comunicazione che potrebbe essere disponibile in un momento in cui l'applicazione non può connettersi al server (ad esempio usano SMS ma la tua app ha bisogno di connettività IP), il primo approccio non presenta vantaggi rispetto al secondo, eccetto forse un tempo leggermente inferiore per visualizzare nuovi messaggi. –

+0

Il problema è che iOS non riattiverà l'app, se è stata interrotta forzatamente. Quindi non c'è modo di comunicare con il server, quando ricevi una notifica, verrà semplicemente visualizzato. –