Lograr que los usuarios instalen tu aplicación es solo la mitad de la batalla. Conseguir que lo usen regularmente es la otra mitad. Es muy posible que sus usuarios se olviden completamente de su aplicación después de usarla solo una o dos veces. Lo que con todas las otras nuevas aplicaciones compiten por su atención..
Al utilizar notificaciones push, puede recordar a los usuarios su aplicación de vez en cuando, lo que mejora las posibilidades de que su aplicación permanezca instalada en sus dispositivos.
Google Cloud Messaging, GCM para abreviar, es un servicio gratuito que puede utilizar para enviar notificaciones automáticas a sus usuarios. En este tutorial, aprenderá cómo usarlo para crear una aplicación de Android que pueda recibir notificaciones push y un simple script de Python del lado del servidor que puede generar y enviarlos..
Para la mayoría de las comunicaciones cliente-servidor, el cliente inicia solicitudes para recibir datos del servidor. En otras palabras, el cliente extrae datos del servidor. En el caso de notificaciones push, sin embargo, es el servidor el que inicia la transferencia de datos..
Esto generalmente se logra manteniendo una conexión TCP / IP persistente, una conexión que permanece abierta indefinidamente, entre el servidor y el cliente. Eso puede sonar muy bien, pero si tiene una aplicación popular, mantener miles de conexiones persistentes entre su servidor y los dispositivos de sus usuarios puede ser muy costoso.
Google Cloud Messaging es un servicio que resuelve este problema actuando como intermediario entre su servidor y el dispositivo de su usuario. Con GCM, el servidor de conexión en la nube de Google, a menudo denominado CCS, administra las conexiones persistentes por usted. También se asegura de que sus notificaciones push sean entregadas de forma segura y confiable.
Para seguir conmigo, necesitas:
Inicie Android Studio y cree un nuevo proyecto con un vacío Actividad
. Si usó los valores predeterminados, el proyecto debería incluir una clase Java en MainActivity.java.
En este proyecto, usaremos el complemento de servicios de Google para configurar GCM. Inclúyalo en el proyecto agregando la siguiente línea en el dependencias
sección del proyecto construir.gradle:
groovy classpath 'com.google.gms: google-services: 1.5.0'
A continuación, aplique el plugin en el aplicación
módulo de construir.gradle:
maravilloso aplique el complemento: 'com.google.gms.google-services'
Para poder utilizar la API de GCM, agregue com.google.android.gms: play-services
como un compilar
Dependencia en el mismo archivo:
compilación maravillosa "com.google.android.gms: play-services: 8.3.0"
Si hace clic en el Sincronizar ahora botón, debería ver el siguiente error:
Haga clic en el Instalar repositorio y sincronizar proyecto enlace para corregir el error.
Dentro del proyecto AndroidManifest.xml archiva, crea y utiliza un personalizado C2D_MESSAGE permiso basado en el nombre del paquete de su proyecto. Asegúrese de que el nivel de protección
del permiso se establece en firma.
"xml
"
Las notificaciones se reciben en forma de emisiones. Para manejar esas transmisiones, nuestra aplicación necesita un Receptor de radiodifusión
. Sin embargo, no tenemos que crearlo manualmente. En lugar de eso podemos usar el GcmReceptor
clase como la Receptor de radiodifusión
.
los Receptor de radiodifusión
debe tener un filtro de intención
que responde a la com.google.android.c2dm.intent.RECEIVE
acción y el nombre de su categoría
debe coincidir con el nombre del paquete de su proyecto. Agregue el siguiente código al manifiesto:
"xml
"
Al comunicarnos con el servidor de conexión en la nube, debemos identificarnos utilizando una clave API en el lado del servidor y una identificación del remitente en el lado del cliente. Para obtener la clave API y la ID del remitente, cree un nuevo proyecto en la consola de desarrolladores.
Comience haciendo clic en el Elige una plataforma botón. A continuación, haga clic en Habilitar servicios para mi aplicación de Android botón. Cuando lo haga, se le pedirá que proporcione un nombre y un nombre de paquete de Android para su aplicación. Asegúrese de que el nombre del paquete de Android que proporcione coincida con el nombre del paquete que ingresó cuando creó el proyecto de Android Studio.
A continuación, haga clic en Elegir y configurar servicios. botón en la parte inferior. Ahora puede seleccionar los servicios de Google que desea agregar a la aplicación.
Por ahora, haga clic en Mensajería en la nube botón y luego haga clic Habilitar la mensajería de Google Cloud. Después de unos segundos, se le presentará la clave API del servidor y la ID del remitente. Tome nota de la clave API del servidor y presione Cerrar.
El complemento de Servicios de Google que agregamos anteriormente necesita un archivo de configuración para funcionar correctamente. Genere el archivo haciendo clic en el Generar archivos de configuración. botón.
Una vez que se haya generado el archivo, descárguelo y colóquelo dentro de su proyecto de Android Studio aplicación directorio.
GCM identifica dispositivos Android utilizando tokens de registro. Por lo tanto, nuestra aplicación debe poder registrarse desde cualquier dispositivo Android en el que esté instalada..
El registro se debe realizar en un subproceso en segundo plano porque el proceso puede tardar un tiempo dependiendo de la conectividad de la red. Debido a que el registro no necesita ninguna entrada del usuario, un Servicio de Intención
es ideal para esta tarea.
Crear una nueva clase de Java llamada RegistrationService.java, hazlo una subclase de Servicio de Intención
, y anular su onHandleIntent
método.
"java public class RegistrationService extiende IntentService public RegistrationService () super (" RegistrationService ");
@ Anular la protección del vacío en HandleIntent (Intención de intención) "
Dentro de onHandleIntent
En este método, podemos usar la API de ID de instancia para generar o recuperar el token de registro. Primero, crea una instancia de ID de instancia
clase, usando su obtener Instancia
método.
java InstanceID myID = InstanceID.getInstance (this);
Ahora podemos usar el GetToken
método de la ID de instancia
objeto de obtener el token de registro en forma de Cuerda
. GetToken
espera el ID del remitente como uno de sus argumentos. Porque hemos añadido el google-services.json archivo a nuestro proyecto, podemos pasar la ID del remitente al método usando R.string.gcm_defaultSenderID
.
java String registrationToken = myID.getToken (getString (R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
Si desea ver el contenido del token de registro para fines de depuración, puede registrarlo como un mensaje de depuración utilizando la Log.d
método.
java Log.d ("Token de registro", registrationToken);
En este punto, podría enviar el token de registro a su servidor web y almacenarlo en una base de datos allí. Sin embargo, no tiene que hacer esto si no planea dirigirse a sus usuarios individualmente. Si planea enviar el mismo mensaje a todos los usuarios, debe seguir el enfoque de publicación-suscripción..
Ahora te mostraré cómo suscribirte a un tema
llamado my_little_topic. Solo toma dos líneas de código. Primero, crea una nueva instancia de GcmPubSub
clase usando su obtener Instancia
método. A continuación, llame a su suscribir
Método y pasarle el token de registro, junto con el nombre del tema.
Suscripción a Java GcmPubSub = GcmPubSub.getInstance (this); suscripción.subscribe (registrationToken, "/ topics / my_little_topic", null);
Nuestra aplicación ahora puede recibir cada notificación de inserción publicada en my_little_topic.
Finalmente, defina el servicio en AndroidManifest.xml.
"xml
"
El servicio de registro está completo..
InstanceIDListenerService
Los tokens de registro se actualizan periódicamente. En consecuencia, cada aplicación de Android que utiliza GCM debe tener un InstanceIDListenerService
que puede manejar esos refrescos. Por lo tanto, crea un nuevo archivo Java llamado TokenRefreshListenerService.java y convertirlo en una subclase de InstanceIDListenerService
. Dentro de onTokenRefresh
método de la clase, todo lo que tenemos que hacer es simplemente comenzar de nuevo el proceso de registro iniciando el servicio de registro usando un Intención
y el Empieza el servicio
método.
Agregue el siguiente código a TokenRefreshListenerService.java:
java public class TokenRefreshListenerService extiende InstanceIDListenerService @Override public void onTokenRefresh () Intent i = new Intent (this, RegistrationService.class); servicio de inicio (i);
Este servicio debe ser capaz de responder a la com.google.android.gms.iid.InstanceID
acción. Por lo tanto, al definir el servicio en AndroidManifest.xml, agregue el apropiado filtro de intención
.
"xml
"
Para asegurarnos de que el proceso de registro comience tan pronto como se inicie la aplicación, debemos iniciar la Servicio de registro
clase dentro del onCreate
método de Actividad principal
. Para ello, crea un Intención
para ello y utilizar el Empieza el servicio
método.
java Intent i = new Intent (this, RegistrationService.class); servicio de inicio (i);
GCM muestra automáticamente notificaciones push en la bandeja de notificaciones tan pronto como se reciben. Sin embargo, solo lo hace si la aplicación asociada contiene un GCMListenerService
.
Crear una nueva clase de Java llamada NotificacionesListenerService y convertirlo en una subclase de GCMListenerService
. A menos que quiera manejar los datos enviados usted mismo, no tiene que escribir ningún código dentro de esta clase. Podemos dejar esta clase en blanco por ahora..
"java public class NotificationsListenerService extiende GcmListenerService
"
Al definir el servicio en AndroidManifest.xml, asegúrese de agregar un filtro de intención
que le permite responder a la com.google.android.c2dm.intent.RECEIVE
acción.
"xml
"
Cada notificación de inserción debe tener un icono asociado. Si no tiene uno a mano, puede obtener uno de la Biblioteca de iconos de diseño de materiales de Google.
Una vez que descargue el icono, colóquelo dentro de la res Carpeta de tu proyecto. Estaré usando ic_cloud_white_48dp como el icono.
Nuestra aplicación de Android ya está completa. Una vez que lo compile y lo ejecute en un dispositivo Android, podrá ver el token de registro en el logcat troncos.
Presione el botón Atrás en su dispositivo para salir de la aplicación. Esto es necesario porque GCM mostrará notificaciones automáticas solo si el usuario no está usando la aplicación. Si desea que se muestren las notificaciones incluso cuando la aplicación se está ejecutando, tendrá que crear las notificaciones usted mismo dentro NotificacionesListenerService
utilizando la Notification.Builder
clase.
En la parte final de este tutorial, crearemos un simple script de Python que puede generar y enviar notificaciones push a todos los dispositivos Android en los que está instalada nuestra aplicación..
Puede ejecutar este script desde su computadora local o desde un servidor web remoto al que tenga acceso SSH.
Crear un nuevo archivo llamado enviar.py y ábrelo usando tu editor de texto favorito.
En la parte superior del archivo, importe el urllib2
y urllib
módulos Utilizaremos estos módulos para enviar datos al servidor de conexión en la nube de Google. Importar el json
Módulo también porque los datos que enviamos deben ser JSON válidos. Por último, para acceder a los argumentos de la línea de comandos, importe el sys
módulo.
python from urllib2 import * import urllib import json import sys
A continuación, cree una variable que almacene la clave API del servidor de la que tomó nota anteriormente. La clave debe ser parte de cada solicitud HTTP que hacemos al CCS.
python MY_API_KEY = "ABCDEF123456789ABCDE - 12A"
Cada notificación debe tener un título y un cuerpo. En lugar de codificarlos en nuestra secuencia de comandos, aceptemos el título y el cuerpo como argumentos de línea de comando utilizando el argv
formación.
python messageTitle = sys.argv [1] messageBody = sys.argv [2]
Cree un nuevo objeto de diccionario de Python para representar los datos que deben enviarse al CCS. Para que nuestra aplicación de Android pueda recibir la notificación, debe publicarse en un tema llamado my_little_topic. Por lo tanto, agregue una clave llamada a al diccionario y establecer su valor en / topics / my_little_topic.
Para representar el contenido de la notificación, agregue una clave llamada notificación al diccionario y establezca su valor en otro objeto del diccionario que contiene tres claves:
Asegúrese de que el valor de la icono
la tecla coincide con el nombre del icono que se puede dibujar en tu proyecto de Android.
python data = "to": "/ topics / my_little_topic", "notification": "body": messageBody, "title": messageTitle, "icon": "ic_cloud_white_48dp"
Convierta el diccionario a una cadena JSON usando el deshecho
función de la json
módulo:
python dataAsJSON = json.dumps (datos)
Todo lo que tenemos que hacer ahora es enviar la cadena JSON a https://gcm-http.googleapis.com/gcm/send. Para ello, crea un nuevo Solicitud
objeto y conjunto dataAsJSON
como sus datos. A continuación, establezca la Autorización
encabezado a MY_API_KEY
y el Tipo de contenido
encabezado a aplicación / json.
python request = Request ("https://gcm-http.googleapis.com/gcm/send", dataAsJSON, "Authorization": "key =" + MY_API_KEY, "Content-type": "application / json")
Finalmente, para ejecutar la solicitud y obtener la respuesta, pase el objeto de solicitud a la urlopen
funciona y llama a su leer
método.
python print urlopen (request) .read ()
El script de Python ahora está completo y listo para usar.
En este punto, estamos listos para enviar notificaciones automáticas a todos los dispositivos en los que está instalada nuestra aplicación. Abra una terminal e ingrese el directorio en el que creó enviar.py.
Pase el nombre del script a la pitón
ejecutable junto con una cadena para el título de la notificación y una para el cuerpo de la notificación. Aquí hay un ejemplo que puedes usar:
bash python send.py "Mi primera notificación de inserción" "¡GCM API es maravilloso!"
Si no hay errores, debería obtener una respuesta como esta:
javascript "message_id": 12345676892321
Si verifica su dispositivo Android, debería ver una nueva notificación en la bandeja de notificaciones.
Ahora sabes cómo enviar notificaciones push a tus usuarios. En esta lección, aprendió cómo crear una aplicación de Android capaz de registrarse y recibir notificaciones que se publican sobre un tema específico. También aprendió a crear un script de Python que puede publicar notificaciones.
A pesar de que las notificaciones push pueden parecer una excelente forma de comunicarse con sus usuarios, le sugiero que las use con moderación y solo si tiene algo útil que decir, ya que enviar demasiadas veces es la forma más rápida de obtener su aplicación. desinstalado.
Para obtener más información sobre Google Cloud Messaging, consulte la Guía de Cloud Messaging..