Domanda

Recentemente ho appreso della capacità delle app per iPhone di ricevere quasi istantaneamente notifiche alle app notifiche alle app.

Questo viene fornito sotto forma di notifiche push, un protocollo su misura che mantiene una connessione dati sempre attiva all'iPhone e invia pacchetti binari all'app, che fa apparire avvisi incredibilmente rapidamente, tra 0,5 e 5 secondi dall'invio dell'app del server al tempo di risposta dell'app del telefono.Questi vengono inviati come dati, anziché come SMS, in pacchetti molto piccoli addebitati come parte del piano dati, non come messaggi in entrata.

Vorrei sapere se, utilizzando Android, esiste una funzionalità simile o se è possibile implementare qualcosa di simile utilizzando le API Android.Per chiarire, definisco simile come:

  • Non un messaggio SMS, ma una soluzione basata sui dati
  • Il più possibile in tempo reale
  • È scalabile, ovvero, come parte server di un'app mobile, potrei notificare migliaia di istanze dell'app in pochi secondi

Apprezzo che l'app possa essere basata su pull, in stile richiesta/risposta HTTP, ma idealmente non voglio eseguire un polling pesante solo per verificare la presenza di notifiche;inoltre è come prosciugare il piano dati.

È stato utile?

Soluzione

Messaggistica cloud Firebase Domande frequenti sull'FCM è la nuova versione di GCM.Eredita l'infrastruttura principale di GCM per fornire messaggi in modo affidabile su Android, iOS e Chrome.Continueranno tuttavia a supportare GCM perché molti sviluppatori utilizzano oggi gli SDK GCM per gestire le notifiche e l'aggiornamento dell'app client richiede tempo.

Dal 26 giugno 2012, Messaggistica Google Cloud è il modo preferito per inviare messaggi alle applicazioni in esecuzione sui dispositivi.

In precedenza (e ora deprecato), il servizio veniva chiamato Messaggistica dal cloud al dispositivo.

Altri suggerimenti

XMPP è una buona soluzioneL'ho usato per un'applicazione Android abilitata al push, in tempo reale.XMPP è potente, altamente estensibile e facile da integrare e utilizzare.

Ci sono un sacco di server XMPP gratuiti (anche se per cortesia non dovresti abusarne) e ci sono server open source che puoi eseguire su una delle tue macchine. OpenFire è una scelta eccellente

La libreria che desideri non lo è Schiaffo come notato sopra, lo è uno schiaffo.Ma nota, questo è un ambiente di compilazione: dovrai creare la libreria.

Questo è un calcolo che ho fatto sull'impatto sulla durata della batteria di una soluzione XMPP:

Il client Android deve mantenere una connessione TCP persistente svegliandosi periodicamente per inviare un battito cardiaco al server XMPP.
Ciò impone chiaramente un costo in termini di consumo energetico.Di seguito viene fornita una stima di questo costo:

  • Utilizzando una batteria da 1400 mAh (come quella fornita nel Nexus One e nell'HTC Desire)
  • Un dispositivo inattivo, connesso a una rete 3G, utilizza circa 5 mA
  • Il ciclo di risveglio, battito cardiaco e sonno si verifica ogni 5 minuti, richiede tre secondi per completare e utilizza 300 mA
  • Il costo orario di utilizzo della batteria è quindi:
    • 36 secondi 300 mA = 3 mAh invio battito cardiaco
    • 3600 secondi 5 mA = 5 mAh al minimo
    • 4:95 + 3 = 7:95mAh combinati
  • Una batteria da 1400 mAh dura circa 11,6 giorni al minimo e 7,3 giorni durante l'esecuzione dell'applicazione, che rappresenta una riduzione approssimativa del 37% nella durata della batteria.
  • Tuttavia, una riduzione della durata della batteria del 37% rappresenta il caso peggiore assoluto in pratica dato che i dispositivi sono raramente completamente inattivi.

Recentemente ho iniziato a giocare con MQTT http://mqtt.org per Android come modo per fare ciò che chiedi (ad es.non SMS ma basato sui dati, consegna dei messaggi quasi immediata, scalabile, senza polling, ecc.)

Ho un post sul blog con informazioni di base su questo nel caso sia utile http://dalelane.co.uk/blog/?p=938

(Nota:MQTT è una tecnologia IBM e devo sottolineare che lavoro per IBM.)

Dai un'occhiata a Xtify piattaforma.Sembra che questo sia quello che stanno facendo,

Google sta svalutando C2DM, ma al suo posto ha introdotto GCM (Google Cloud Messaging). Non credo che ci sia alcuna quota ed è gratuito!Richiede però Android 2.2+! http://developer.android.com/guide/google/gcm/index.html

Se puoi contare sul fatto che le biblioteche di Google siano lì per il tuo mercato di riferimento, allora potresti volerlo fare a cavalcioni di GTalk funzionalità (registrare una risorsa sul nome utente esistente - intercettare i messaggi non appena arrivano con un BroadcastReceiver).

In caso contrario, e lo aspetto non puoi, allora sei interessato raggruppando le tue versioni di XMPP.Questo è un problema, ma potrebbe essere reso più semplice se XMPP fosse raggruppato separatamente come libreria autonoma.

Potresti anche considerare PubSubHubub, ma non ho idea dell'utilizzo della rete.Credo che sia costruito su XMPP.

Ho esaminato questo problema e PubSubHubBub consigliato da jamesh non è un'opzione.PubSubHubBub è destinato alle comunicazioni da server a server

"Sono dietro un NAT.Posso iscrivermi ad un Hub?L'hub non riesce a connettersi a me."

/Anonimo

No, PSHB è un protocollo da server-server.Se sei dietro NAT, non sei davvero un server.Mentre abbiamo preso a calci le idee per le estensioni PSHB opzionali da fare ottiene ("sondaggi lunghi") e/o polling della casella di messaggi per tali clienti, non è nelle specifiche principali.La specifica principale è solo da server-server.

/Brad Fitzpatrick, San Francisco, California

Fonte: http://moderator.appspot.com/#15/e=43e1a&t=426ac&f=b0c2d (link diretto non possibile)

Sono giunto alla conclusione che il metodo più semplice è utilizzare il push HTTP Comet.Questa è una soluzione semplice e ben compresa, ma può anche essere riutilizzata per applicazioni web.

C'è un nuovo sforzo open source per sviluppare una libreria Java per le notifiche push su Android, utilizzando il server della cometa Meteor come backend.Puoi verificarlo su il blog del progetto diacono.Abbiamo bisogno di sviluppatori, quindi per favore spargi la voce!

Non riesco a trovare dove l'ho letto, ma credo che Gmail utilizzi una connessione TCP aperta per eseguire il push della posta elettronica.

COME GTalk non è più presente nell'SDK, potrebbe essere una buona idea creare un sistema di messaggistica push "standard".In questo modo, è necessario eseguire un solo servizio e aprire solo una connessione TCP aggiuntiva.Le applicazioni dovrebbero comunicare con questo servizio utilizzando Intents e dovrebbe prima richiedere l'autorizzazione per inviare e ricevere notifiche dal servizio.Il servizio dovrebbe quindi notificare all'utente che una nuova applicazione desidera inviare e ricevere messaggi.L'utente concederà o negherà l'autorizzazione, in modo da mantenere il controllo.L'applicazione registrerà quindi un'azione + una categoria nel servizio, in modo che il servizio sappia come consegnare il messaggio inviato.

Sarebbe una buona idea oppure no?

Perché non vai con l'implementazione XMPP.in questo momento ci sono così tanti server pubblici disponibili tra cui gtalk, jabber, citadel ecc.Per Android è disponibile anche un SDK denominato SMACK.Non possiamo dire una notifica push ma utilizzando XMPP è possibile mantenere aperta una connessione tra client e server che consentirà una comunicazione bidirezionale.Significa che sia il client che il server Android possono comunicare tra loro.Al momento questo soddisferà la necessità di Push in Android.Ho implementato un codice di esempio e funziona davvero alla grande

Ho recentemente sviluppato http://pushdroid.org è una singola applicazione che dovrebbe essere installata sul telefono proprio come Google l'ha implementata nella 2.2, funziona dalla 1.5 e trasmette tramite intento.

Google recentemente (18 maggio 2016) annunciato Quello Base di fuoco ora è una piattaforma unificata per gli sviluppatori mobili che include notifiche push quasi in tempo reale. È anche multipiattaforma:

La società ora offre a tutti gli utenti Firebase notifiche gratuite e illimitate con supporto per iOS, Android e il Web.

fonte

Il problema con GCM è che ci sono molte configurazioni coinvolte nel processo:

  • Devi aggiungere un sacco di boilerplate alla tua app Android
  • È necessario configurare un server esterno per comunicare con il server GCM
  • Dovrai scrivere dei test

Se ti piacciono le cose semplici (come me) dovresti provare Dirigibile urbano.È (IMHO) il modo più semplice per utilizzare GCM nella tua app senza eseguire molte configurazioni.Ti offre anche una bella GUI per verificare che i tuoi messaggi GCM vengano consegnati correttamente.

  • Puoi trovare la documentazione e la guida introduttiva Qui
  • È possibile trovare un'applicazione di esempio Qui

Nota:Non sono affiliato in alcun modo con UrbanAirship

https://github.com/Guti/Google-Cloud-Messaging--Titanium-/blob/master/src/com/google/android/gcm/GCMRegistrar.java

È una soluzione davvero valida e funzionante per push.

Per favore, provalo

Hanno i loro ascoltatori che devono essere utilizzati da te utilizzando le loro classi di libreria nel tuo codice.Non devi preoccuparti di spingere.Devi inviare il messaggio al server il server invierà il messaggio al dispositivo.Usano OAuth.Per quanto riguarda i protocolli, esistono due metodi che utilizzano CCS e XMPP.CCS utilizza semplicemente XMPP come livello di trasporto autenticato, quindi puoi utilizzare la maggior parte delle librerie XMPP per gestire la connessione.Per inviare notifiche al dispositivo puoi scrivere il codice nell'app Android da inviare insieme al codice del server.l'invio del messaggio avverrà esclusivamente tramite il tuo codice.Il resto sarà curato da Google Server nel caso GCM.Puoi controllare i dettagli a questo link

http://developer.android.com/google/gcm/server.html

Anche per questioni di sicurezza

sicurezza della messaggistica cloud di google https://groups.google.com/forum/#!topic/android-gcm/M-EevBitbhQ

Nel caso in cui la tua app non sia in esecuzione, anche i dispositivi possono ricevere notifiche perché devi scrivere il codice per gli ascoltatori delle trasmissioni.In background ascolterà il server e ogni volta che sarà presente un pacchetto di messaggi, riceverà il messaggio come notifica.Android ha un servizio di cui non devi preoccuparti.Devi solo utilizzare quelle risorse utilizzando la classe della libreria che semplifica il tuo lavoro e lasciare che scrivano se la tua app non è in esecuzione, quindi riceve anche la notifica.Ovviamente, ci sarebbe qualche ascoltatore che fa in modo che l'app riceva. Controlla la sezione "Ricevi il messaggio" in questo link

http://developer.android.com/google/gcm/client.html

Accetterà anche le richieste degli utenti.Per GCM andrà bene.Seleziona "Invia un messaggio"

http://developer.android.com/google/gcm/client.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top