Come iniziare con le notifiche push su Android

introduzione

Chiedere agli utenti di installare la tua app è solo metà della battaglia. Farli usare regolarmente è l'altra metà. È del tutto possibile che i tuoi utenti dimentichino completamente la tua app dopo averla utilizzata solo una volta o due. Cosa con tutte le altre nuove app in competizione per la loro attenzione.

Utilizzando le notifiche push, puoi ricordare agli utenti la tua app di tanto in tanto, migliorando le possibilità che la tua app resti installata sui loro dispositivi.

Google Cloud Messaging, in breve GCM, è un servizio gratuito che puoi utilizzare per inviare notifiche push ai tuoi utenti. In questo tutorial, impari come usarlo per creare un'app per Android in grado di ricevere notifiche push e un semplice script Python lato server in grado di generarli e inviarli.

Perché utilizzare Google Cloud Messaging?

Per la maggior parte delle comunicazioni client-server, il client avvia richieste per ricevere dati dal server. In altre parole, il client preleva i dati dal server. Nel caso delle notifiche push, tuttavia, è il server che avvia il trasferimento dei dati.

Ciò viene in genere eseguito mantenendo una connessione TCP / IP permanente, ovvero una connessione che rimane aperta indefinitamente, tra il server e il client. Potrebbe sembrare una buona idea, ma se hai un'app popolare, mantenere migliaia di connessioni persistenti tra il tuo server e i dispositivi dei tuoi utenti può essere molto costoso.

Google Cloud Messaging è un servizio che risolve questo problema fungendo da intermediario tra il tuo server e il dispositivo dell'utente. Con GCM, il Cloud Connection Server di Google, spesso indicato come CCS, gestisce le connessioni persistenti per te. Garantisce inoltre che le notifiche push siano consegnate in modo sicuro e affidabile.

Prerequisiti

Per seguire insieme a me, hai bisogno di:

  • l'ultima versione di Android Studio
  • Python 2.7.6 o successivo
  • un dispositivo con Android 4.4 o versione successiva con Google Play Services installato

1. Impostazione del progetto Android Studio

Avvia Android Studio e crea un nuovo progetto con un vuoto Attività. Se hai usato i valori predefiniti, il progetto dovrebbe includere una classe Java in MainActivity.java.

Passaggio 1: aggiungere le dipendenze

In questo progetto, utilizzeremo il plug-in gradle di Google Services per configurare GCM. Includilo nel progetto aggiungendo la seguente riga nel dipendenze sezione del progetto build.gradle:

groovy classpath 'com.google.gms: google-services: 1.5.0'

Successivamente, applica il plugin nel App modulo di build.gradle:

groovy applica il plug-in: "com.google.gms.google-services"

Per poter utilizzare l'API GCM, aggiungi com.google.android.gms: play-servizi come un compilare dipendenza nello stesso file:

groovy compile "com.google.android.gms: play-services: 8.3.0"

Se si fa clic sul Sincronizza ora pulsante, dovresti vedere il seguente errore:

Clicca il Installa il repository e sincronizza il progetto link per correggere l'errore.

Passaggio 2: aggiornare il manifest

All'interno del progetto AndroidManifest.xml file, creare e utilizzare una personalizzata C2D_MESSAGE permesso basato sul nome del pacchetto del progetto. Assicurarsi che il ProtectionLevel del permesso è impostato su firma.

"xml

"

Le notifiche sono ricevute sotto forma di trasmissioni. Per gestire tali trasmissioni, la nostra app ha bisogno di a BroadcastReceiver. Tuttavia, non è necessario crearlo manualmente. Possiamo invece usare il GcmReceiver classe come il BroadcastReceiver.

Il BroadcastReceiver deve avere un intent-filtro che risponde al com.google.android.c2dm.intent.RECEIVE azione e il suo nome categoria deve corrispondere al nome del pacchetto del progetto. Aggiungi il seguente codice al manifest:

"xml

"

2. Ottieni una chiave API server e un ID mittente

Durante la comunicazione con Cloud Connection Server, dobbiamo identificarci utilizzando una chiave API sul lato server e un ID mittente sul lato client. Per ottenere la chiave API e l'ID del mittente, crea un nuovo progetto nella console degli sviluppatori.

Inizia facendo clic sul Scegli una piattaforma pulsante. Quindi, fai clic su Abilita i servizi per la mia app per Android pulsante. Quando lo fai, ti verrà chiesto di fornire un nome e un nome di pacchetto Android per la tua app. Assicurati che il nome del pacchetto Android fornito corrisponda al nome del pacchetto inserito quando hai creato il progetto Android Studio.

Quindi, fai clic su Scegli e configura i servizi pulsante in basso. Ora puoi selezionare i servizi Google che desideri aggiungere all'app.

Per ora, clicca il Cloud Messaging pulsante e quindi fare clic Abilita Google Cloud Messaging. Dopo pochi secondi, ti verrà presentata la chiave API del server e l'ID del mittente. Prendere nota della chiave API del server e premere Vicino.

Il plug-in dei servizi Google che abbiamo aggiunto in precedenza richiede un file di configurazione per funzionare correttamente. Generare il file facendo clic sul Genera file di configurazione pulsante.

Una volta che il file è stato generato, scaricalo e inseriscilo all'interno del tuo progetto Android Studio App elenco.

3. Registrazione del cliente

GCM identifica i dispositivi Android utilizzando i token di registrazione. Pertanto, la nostra app deve essere in grado di registrarsi da tutti i dispositivi Android su cui è installata.

Passaggio 1: creare un servizio di registrazione

La registrazione deve essere eseguita su un thread in background perché il processo potrebbe richiedere del tempo a seconda della connettività di rete. Perché la registrazione non ha bisogno di input da parte dell'utente, a IntentService è l'ideale per questo compito.

Crea una nuova classe Java chiamata RegistrationService.java, rendilo una sottoclasse di IntentService, e scavalca il suo onHandleIntent metodo.

"java public class RegistrationService estende IntentService public RegistrationService () super (" RegistrationService ");

@Override protected void onHandleIntent (Intent intent)  "

Dentro il onHandleIntent metodo, possiamo usare l'API ID istanza per generare o recuperare il token di registrazione. Innanzitutto, crea un'istanza di InstanceID classe, usando il suo getInstance metodo.

java InstanceID myID = InstanceID.getInstance (this);

Ora possiamo usare il ControllaToken metodo del InstanceID oggetto per ottenere il token di registrazione sotto forma di a Stringa. ControllaToken si aspetta l'ID del mittente come uno dei suoi argomenti. Perché abbiamo aggiunto il google-services.json file al nostro progetto, possiamo passare l'ID mittente al metodo usando R.string.gcm_defaultSenderID.

java String registrationToken = myID.getToken (getString (R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

Se vuoi vedere il contenuto del token di registrazione a scopo di debug, puoi loggarlo come un messaggio di debug usando il Log.d metodo.

java Log.d ("Token di registrazione", registrationToken);

A questo punto, è possibile inviare il token di registrazione al server Web e memorizzarlo in un database. Tuttavia, non devi farlo se non hai intenzione di indirizzare i tuoi utenti individualmente. Se si prevede di inviare lo stesso messaggio a tutti gli utenti, è necessario seguire l'approccio publish-subscribe.

Ti mostrerò ora come iscriverti a argomento chiamato my_little_topic. Ci vogliono solo due righe di codice. Innanzitutto, crea una nuova istanza di GcmPubSub classe usando il suo getInstance metodo. Quindi, chiama il suo sottoscrivi metodo e passare il token di registrazione ad esso, insieme al nome dell'argomento.

abbonamento a Java GcmPubSub = GcmPubSub.getInstance (this); subscription.subscribe (registrationToken, "/ topics / my_little_topic", null);

La nostra app può ora ricevere tutte le notifiche push pubblicate su my_little_topic.

Infine, definisci il servizio in AndroidManifest.xml.

"xml

"

Il servizio di registrazione è completo.

Passaggio 2: creare un InstanceIDListenerService

I token di registrazione vengono aggiornati periodicamente. Di conseguenza, ogni app per Android che utilizza GCM deve avere un InstanceIDListenerService in grado di gestire tali aggiornamenti. Pertanto, creare un nuovo file Java chiamato TokenRefreshListenerService.java e renderlo una sottoclasse di InstanceIDListenerService. Dentro il onTokenRefresh metodo della classe, tutto ciò che dobbiamo fare è semplicemente avviare nuovamente il processo di registrazione avviando il servizio di registrazione utilizzando un Intento e il StartService metodo.

Aggiungere il seguente codice a TokenRefreshListenerService.java:

java public class TokenRefreshListenerService estende InstanceIDListenerService @Override public void onTokenRefresh () Intent i = new Intent (this, RegistrationService.class); StartService (i);

Questo servizio deve essere in grado di rispondere al com.google.android.gms.iid.InstanceID azione. Pertanto, durante la definizione del servizio in AndroidManifest.xml, aggiungi l'appropriato intent-filtro.

"xml

"

Passaggio 3: avvio del servizio di registrazione

Per assicurarti che il processo di registrazione abbia inizio non appena l'app inizia, dobbiamo avviare il RegistrationService classe dentro il onCreate metodo di Attività principale. Per fare ciò, crea un Intento per questo e usa il StartService metodo.

java Intent i = new Intent (this, RegistrationService.class); StartService (i);

4. Visualizzazione delle notifiche push

GCM visualizza automaticamente le notifiche push nella barra delle notifiche non appena vengono ricevute. Tuttavia, lo fa solo se l'app associata contiene a GCMListenerService.

Crea una nuova classe Java chiamata NotificationsListenerService e renderlo una sottoclasse di GCMListenerService. A meno che non si desideri gestire da soli i dati spinti, non è necessario scrivere alcun codice all'interno di questa classe. Possiamo lasciare questa classe vuota per ora.

"java public class NotificationsListenerService estende GcmListenerService

"

Durante la definizione del servizio in AndroidManifest.xml, assicurati di aggiungere un intent-filtro che gli permette di rispondere al com.google.android.c2dm.intent.RECEIVE azione.

"xml

"

5. Aggiunta di icone di notifica push

Ad ogni notifica push deve essere associata un'icona. Se non ne hai uno a portata di mano, puoi ottenerne uno dalla libreria delle icone di materiali di design di Google.

Una volta scaricata l'icona, inseriscila nel res cartella del tuo progetto. Userò ic_cloud_white_48dp come l'icona.

6. Esecuzione dell'applicazione Android

La nostra app per Android è ora completa. Una volta compilato ed eseguito su un dispositivo Android, sarà possibile visualizzare il token di registrazione in logcat logs.

Premi il pulsante Indietro sul dispositivo per uscire dall'app. Ciò è necessario perché GCM visualizzerà automaticamente le notifiche push solo se l'utente non sta utilizzando l'app. Se desideri che le notifiche vengano visualizzate anche quando l'app è in esecuzione, dovrai creare personalmente le notifiche NotificationsListenerService usando il Notification.Builder classe.

7. Invio di notifiche push

Nella parte finale di questo tutorial, creeremo un semplice script Python in grado di generare e inviare notifiche push a tutti i dispositivi Android su cui è installata la nostra app.

È possibile eseguire questo script dal computer locale o da un server Web remoto a cui si dispone dell'accesso SSH.

Passaggio 1: creazione dello script

Crea un nuovo file chiamato send.py e aprilo usando il tuo editor di testo preferito.

Nella parte superiore del file, importare il file urllib2 e urllib moduli. Utilizzeremo questi moduli per inviare dati al Cloud Connection Server di Google. Importa il jSON modulo anche perché i dati che inviamo devono essere JSON validi. Infine, per accedere agli argomenti della riga di comando, importare il file SYS modulo.

python da urllib2 import * import urllib import json import sys

Quindi, crea una variabile che memorizza la chiave API del server di cui hai preso nota in precedenza. La chiave deve essere parte di ogni richiesta HTTP che facciamo al CCS.

python MY_API_KEY = "ABCDEF123456789ABCDE - 12A"

Ogni notifica deve avere un titolo e un corpo. Invece di codificarli nel nostro script, accettiamo il titolo e il corpo come argomenti della riga di comando usando il argv schieramento.

python messageTitle = sys.argv [1] messageBody = sys.argv [2]

Crea un nuovo oggetto dizionario Python per rappresentare i dati che devono essere inviati a CCS. Affinché la nostra app per Android possa ricevere la notifica, deve essere pubblicata su un argomento chiamato my_little_topic. Pertanto, aggiungere una chiave chiamata a al dizionario e impostarne il valore / Argomenti / my_little_topic.

Per rappresentare il contenuto della notifica, aggiungi una chiave chiamata notifica al dizionario e impostare il suo valore su un altro oggetto dizionario contenente tre chiavi:

  • corpo
  • titolo
  • icona

Assicurarsi che il valore di icona tasto corrisponde al nome dell'icona disegnabile nel tuo progetto Android.

python data = "a": "/ topics / my_little_topic", "notification": "body": messageBody, "title": messageTitle, "icon": "ic_cloud_white_48dp"

Converti il ​​dizionario in una stringa JSON usando il discariche funzione del jSON modulo:

python dataAsJSON = json.dumps (dati)

Tutto quello che dobbiamo fare ora è inviare la stringa JSON a https://gcm-http.googleapis.com/gcm/send. Per fare ciò, creane uno nuovo Richiesta oggetto e insieme dataAsJSON come i suoi dati. Quindi, imposta il Autorizzazione intestazione a MY_API_KEY e il Tipo di contenuto intestazione a application / json.

python request = Request ("https://gcm-http.googleapis.com/gcm/send", dataAsJSON, "Authorization": "key =" + MY_API_KEY, "Content-type": "application / json"))

Infine, per eseguire la richiesta e recuperare la risposta, passare l'oggetto richiesta a urlopen funzione e chiamala leggere metodo.

python print urlopen (request) .read ()

Lo script Python è ora completo e pronto all'uso.

Passaggio 2: esecuzione dello script

A questo punto, siamo pronti per inviare notifiche push a tutti i dispositivi su cui è installata la nostra app. Apri un terminale e inserisci la directory in cui hai creato send.py.

Passa il nome dello script al pitone eseguibile insieme a una stringa per il titolo della notifica e una per il corpo della notifica. Ecco un esempio che puoi usare:

bash python send.py "La mia prima notifica push" "L'API GCM è meravigliosa!"

Se non ci sono errori, dovresti ottenere una risposta simile a questa:

javascript "message_id": 12345676892321

Se controlli il tuo dispositivo Android, dovresti vedere una nuova notifica nella barra delle notifiche.

Conclusione

Ora sai come inviare notifiche push ai tuoi utenti. In questa lezione, hai appreso come creare un'app Android in grado di registrarsi e ricevere notifiche pubblicate su un argomento specifico. Hai anche imparato a creare uno script Python in grado di pubblicare notifiche.

Anche se le notifiche push possono sembrare un ottimo modo per comunicare con i tuoi utenti, ti suggerisco di usarle con parsimonia e solo se hai qualcosa di utile da dire, perché l'invio di troppe di esse troppo spesso è forse il modo più veloce per ottenere la tua app disinstallato.

Per ulteriori informazioni su Google Cloud Messaging, consultare la Guida alla messaggistica cloud.