Quando inviare una notifica push a un'app di chat?

1

Voglio aggiungere notifiche push a un'applicazione di chat su cui sto lavorando.

Inizialmente pensavo di dover scrivere una logica di business per rilevare che un messaggio non era stato recapitato e quindi tentare di inviare la notifica per il messaggio non letto. Se viene rilevata la presenza online di un utente, posso saltare la chiamata di notifica push.

Tuttavia, dopo aver svolto alcune ricerche, ho scoperto questa risposta da un tecnico di supporto di PubNub.

La risposta afferma che a loro non importa se l'abbonamento è attivo, semplicemente inviano richieste GCM / APNS per tutti i messaggi.

The publisher does not know or care whether subscribers are active (foreground) or inactive (background or not running at all - kill state) on the device. Publisher always publishes the message with a GCM (and possibly APNS) payload.

Active apps will receive both and will prevent the display of the push notification via the OS's push msg receiver listener.

Inactive apps will receive only the push notification and display that. When end user taps the push msg, it will open the app where you can get the missed message and display the full content in your app's UI.

Se ho capito bene, questo mostrerebbe una notifica se l'app è in background e attiva un metodo ( didReceiveRemoteNotification iOS, ??? Android) se l'app è aperta. Potrei quindi scegliere di visualizzare una notifica local in base alla mia logica.

Questa buona progettazione o le applicazioni di chat in genere fanno più fatica a rilevare se un messaggio è stato consegnato prima di tornare alle notifiche push?

    
posta Ash 18.07.2017 - 02:49
fonte

3 risposte

1

Ho usato il server di chat di ejabberd (utilizzato da WhatsApp) in un progetto. Il team ha implementato la funzionalità di notifica nel modo seguente: -

Per caso utente offline

  • Se non è possibile recapitare il messaggio di chat perché l'utente è offline, abbiamo inviato tale messaggio alla coda di notifica (RabbitMQ)
  • Il servizio di notifica sceglierà la notifica da questa coda e la sposterà sul dispositivo (Android / iOS).

La notifica push di ricezione dell'utente, toccala e vai all'interno dell'app per eseguire un'azione definita.

Se l'utente è connesso al server di chat, la libreria di chat riceverà il messaggio sul gestore e l'app stessa può generare la notifica richiesta in questo caso.

Puoi inviare notifiche push utilizzando il servizio Amazon SNS o anche integrare GCM e APNS.

La coda di notifica design rende le notifiche di chat e push asincrone. Quindi è facile scegliere la notifica e inviare utilizzando il servizio di notifica. Ci potrebbero essere altri modi per farlo, ma meglio non mettere condizioni / elaborazione nel flusso del messaggio di chat. Introdurrà un ulteriore ritardo nella consegna dei messaggi.

Spero che questo ti aiuti.

    
risposta data 22.09.2017 - 09:45
fonte
0

È possibile inviare un nemico di notifica, ma per quanto ne so io iOS ha solo la possibilità di eseguire un trigger personalizzato se l'app è aperta. Quindi potresti voler monitorare un utente in un modo diverso.

Puoi anche monitorare se un utente è attivo attraverso un paio di modi diversi.

Un modo sarebbe sugli eventi in primo piano e sullo sfondo. Se un utente apre l'app o ritorna ad esso, viene effettuata una chiamata per informare il server che l'utente è attivo e non ha bisogno di inviare un push. Quando l'utente esegue lo sfondo dell'app, può essere effettuata una chiamata per informare il tuo server che l'utente è via e inviare notifiche push.

A seconda del modo in cui il server e l'app si connettono tra loro, il server può monitorare se un utente è attivo in base a una connessione attiva o il tempo trascorso dall'ultima richiesta. (L'app potrebbe dover effettuare chiamate periodiche al server quando è in primo piano che può aumentare il carico del server solo per far sapere che sei attivo.)

So che in passato un'app a cui ho lavorato ha utilizzato una chiamata in primo piano / sfondo per far sapere al server se un utente era attivo (ma non per un'app specifica per la chat)

    
risposta data 18.07.2017 - 22:32
fonte
0

È difficile dire cosa fanno gli altri, ma ciò che dovresti fare dipende (come al solito) dalle tue esigenze.

Che cosa stai notificando? Nuovi messaggi in arrivo o messaggi in sospeso da leggere?

Se il primo non ha scelta, devi inviare la notifica con ogni messaggio in arrivo e delegare al client la gestione della notifica e come procedere in base al suo stato (in background, in primo piano, spento, ecc.). Quindi in pratica non è richiesto alcun controllo sulla conferma. Se la tua chat è basata su WebSocket, invece di notifiche push, puoi simulare questo comportamento con eventi specifici.

Ogni piattaforma (iOS e Android) gestisce le notifiche push in diversi modi. Ad esempio, su iOS il sistema (non l'app) è chi gestisce la notifica e passa all'app dopo aver toccato lo schermo. Android è abbastanza diverso. Potrebbe essere gestito dal sistema o dall'app (ma non per entrambi allo stesso tempo) a seconda del formato di notifica e dello stato dell'app.

In ogni caso, è il cliente che decide cosa fare con la notifica. Altrimenti il lato server dovrebbe essere consapevole di ogni singolo stato di ogni singolo client e agire di conseguenza. L'inferno sulla terra. Immagina applicazioni alla scala di WhatsApp. Con abbastanza risorse, dovrebbe essere possibile, ma presumo che sarebbe assurdamente costoso in molti sensi.

È anche il meno costoso. GCM (o Firebase CM) sono liberi di un punto. Non sono sicuro dell'APNS. Abbiamo iniziato a collaborare con Firebase come provider di notifiche cloud di recente, quindi non dobbiamo preoccuparci troppo dell'APNS.

L'invio di notifiche push per messaggio di chat riguarda anche il lato client. La gestione delle notifiche push ha un costo in termini di risorse.

Se vuoi notificare che i messaggi in sospeso devono essere letti, la soluzione è più semplice ed economica della precedente.

Supporrò che tu abbia un server di chat. Il server di chat conosce lo stato dei messaggi. Consegnato significa che è stato spinto al cliente. Ricevuto significa che il cliente conferma la ricezione (o ha richiesto l'attività della stanza).

La notifica dei messaggi in sospeso riguarda il tracciamento della transizione da recapitata a ricevuta . Ad esempio, il nostro server di chat imposta un timeout dopo la consegna di un nuovo messaggio. Nel momento in cui termina il timeout, se il server non ha ricevuto il riconoscimento, invia la notifica. Altrimenti, abortiamo il processo. Ripetiamo questo processo con ogni nuovo messaggio in arrivo.

In questo modo, inviamo notifiche push solo in situazioni molto specifiche, riducendo i costi e risparmiando risorse sia lato client che server.

    
risposta data 23.07.2017 - 15:07
fonte

Leggi altre domande sui tag