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.
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.
Per seguire insieme a me, hai bisogno di:
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.
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.
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
"
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.
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.
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.
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
"
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);
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
"
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.
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.
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.
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:
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.
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.
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.