En este tutorial, aprenderá cómo implementar Google Cloud Messaging GCM en su aplicación de Android. Google Cloud Messaging GCM es un servicio gratuito que ayuda a los desarrolladores a enviar notificaciones a su aplicación de Android. GCM es un servicio que maneja todos los aspectos de la cola de mensajes y la entrega al dispositivo Android de destino. Crearemos un servicio de cliente que le permita registrar su dispositivo Android en el servidor GCM. El servidor GCM generará una identificación de registro y la devolverá a su dispositivo Android y, al usar la identificación de registro en nuestro servidor web PHP, permitirá que se envíen mensajes de notificación. Vamos a empezar…
Mensajería en la nube de Google
- Vaya a la consola de API de Google y haga clic en Crear proyecto .
- Encienda Google Cloud Messaging para Android .
- Vaya a Acceso API en el menú de la barra lateral y haga clic en Crear nueva clave de servidor.
- Haga clic en el botón Crear para continuar.
- Anote su clave API para aplicaciones de servidor (con bloqueo de IP) que se muestra en la siguiente captura de pantalla. Esta clave de API se utilizará al enviar solicitudes al servidor de GCM.
- Vaya a Resumen en el menú de la barra lateral y anote su número de proyecto . Esta será su ID DE REMITENTE en GCM.
Instalar la biblioteca de mensajería en la nube de Google para Android
- Abra Eclipse y haga clic en Android SDK Manager
- Busque Google Cloud Messaging para la biblioteca de Android y haga clic en Instalar.
- Localice la carpeta de la biblioteca GCM de Android descargada .
- Copie el archivo gcm.jar en la carpeta de la biblioteca de su proyecto libs
Crear un servicio CLIENTE
Cree un nuevo proyecto en Eclipse File > New > Android Application Project. Complete los detalles y nombre su proyecto GCMTutorial .
Nombre de la aplicación: GCMTutorial
Nombre del proyecto: GCMTutorial
Nombre del paquete: com.androidbegin.gcmtutorial
Luego nombre su actividad GCMMainActivity.java y pegue el siguiente código.
GCMMainActivity .java
paquete com.androidbegin.gcmtutorial; importar com.google.android.gcm.GCMRegistrar; importar android.os.Bundle; importar android.app.Actividad; importar android.util.Log; importar android.view.View; importar android.widget.Button; public class GCMMainActivity extiende Actividad { String TAG = "Tutorial de GCM::Actividad"; @Anular Vacío protegido onCreate (Paquete de estado de instancia guardado) { super.onCreate(estadoDeInstanciaGuardado); setContentView(R.diseño.actividad_principal); GCMRegistrar.checkDevice(este); GCMRegistrar.checkManifest(esto); // Botón Registrar dispositivo Botón regbtn = (Botón) findViewById(R.id.register); regbtn.setOnClickListener(nueva Vista.OnClickListener() { @Anular public void onClick(Ver v) { Log.i(TAG, "Registrando dispositivo"); // Recuperar la ID del remitente de GCMIntentService.java // El ID del remitente se registrará en GCMRegistrar GCMRegistrar.registrar(GCMMainActivity.this, GCMIntentService.SENDER_ID); } }); } }
En esta actividad, hemos creado un botón y, al hacer clic en el botón, se enviará la ID DEL REMITENTE al servidor GCM .
A continuación, cree un diseño gráfico XML para su MainActivity. Vaya a res > diseño > Haga clic con el botón derecho en diseño > Nuevo > Archivo XML de Android
Asigne un nombre a su nuevo archivo XML activity_main.xml y pegue el siguiente código.
actividad_principal .xml
<RelativeLayout xmlns_android="http://schemas.android.com/apk/res/android" xmlns_herramientas="http://esquemas.android.com/herramientas" android_layout_width="match_parent" android_layout_height="match_parent" > <Botón android_id="@+id/registrar" android_layout_width="wrap_content" android_layout_height="wrap_content" android_layout_centerInParent="verdadero" android_text="@string/regbutton" /> </RelativeLayout>
Producción:
A continuación, cree una clase GCMIntentService. Vaya a Archivo > Nuevo > Clase y asígnele el nombre GCMIntentService .java. Seleccione su paquete llamado com.androidbegin. gcmtutorial y haga clic en Finalizar .
Abra su GCMIntentService .java y pegue el siguiente código.
GCMIntentService .java
paquete com.androidbegin.gcmtutorial; importar java.util.Timer; importar java.util.TimerTask; importar android.app.Notificación; importar android.app.NotificationManager; importar android.app.PendingIntent; importar android.content.Context; importar android.content.Intent; importar android.os.PowerManager; importar android.util.Log; importar com.google.android.gcm.GCMBaseIntentService; clase pública GCMIntentService extiende GCMBaseIntentService { ETIQUETA de cadena final estática privada = "Tutorial de GCM::Servicio"; // Usa tu ID DE PROYECTO de la API de Google en SENDER_ID Cadena final estática pública SENDER_ID = "394127269050"; GCMIntentService público () { super(SENDER_ID); } @Anular Vacío protegido en registrado (contexto de contexto, cadena de identificación de registro) { Log.i(TAG, "enRegistrado: ID de registro=" + ID de registro); } @Anular Vacío protegido en No registrado (contexto de contexto, cadena de identificación de registro) { Log.i(TAG, "onNoregistrado: ID de registro=" + ID de registro); } @Anular Vacío protegido en el mensaje (contexto de contexto, datos de intención) { Mensaje de cadena; // Mensaje del servidor PHP mensaje = datos.getStringExtra("mensaje"); // Abre una nueva actividad llamada GCMMessageView Intención intención = nueva intención (esto, GCMMessageView.class); // Pasar datos a la nueva actividad intent.putExtra("mensaje", mensaje); // Inicia la actividad al hacer clic en la notificación PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); // Crear la notificación con un generador de notificaciones Notificación de notificación = new Notification.Builder (esto) .setSmallIcon(R.dibujable.ic_launcher) .setWhen(System.currentTimeMillis()) .setContentTitle("Tutorial de GCM de Android") .setContentText(mensaje).setContentIntent(pIntent) .obtener la notificación(); // Eliminar la notificación al hacer clic notificación.flags |= Notificación.FLAG_AUTO_CANCEL; Administrador de NotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); manager.notify(R.string.app_name, notificación); { // Despierta el dispositivo Android cuando se recibe la notificación PowerManager pm = (PowerManager) contexto .getSystemService(Contexto.POWER_SERVICE); PowerManager.WakeLock final mWakelock = pm.newWakeLock( PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "GCM_PUSH"); mWakelock.adquire(); // Temporizador antes de poner el dispositivo Android en modo de suspensión. Temporizador temporizador = nuevo temporizador (); Tarea TimerTask = new TimerTask() { ejecución de vacío público () { mWakelock.release(); } }; timer.schedule(tarea, 5000); } } @Anular onError vacío protegido (Contexto arg0, Cadena errorId) { Log.e(TAG, "onError: errorId=" + errorId); } }
En esta actividad, mostraremos el mensaje recibido en una notificación y, al hacer clic en la notificación, se pasará el mensaje de notificación a una nueva actividad. Uso de PowerManager para activar el dispositivo cuando se recibe una notificación. Inserte su ID de proyecto en la cadena de ID de REMITENTE .
A continuación, cree una actividad para mostrar el mensaje de notificación. Vaya a Archivo > Nuevo > Clase y asígnele el nombre GCMMessageView .java. Seleccione su paquete llamado com.androidbegin. gcmtutorial y haga clic en Finalizar .
Abra su GCMMessageView .java y pegue el siguiente código.
GCMMessageView .java
paquete com.androidbegin.gcmtutorial; importar android.app.Actividad; importar android.content.Intent; importar android.os.Bundle; importar android.widget.TextView; public class GCMMessageView extiende Actividad { Mensaje de cadena; TextView txtmsg; @Anular public void onCreate (Paquete guardadoInstanceState) { super.onCreate(estadoDeInstanciaGuardado); setContentView(R.layout.messageview); // Recuperar los datos de GCMIntentService.java Intención i = getIntent(); mensaje = i.getStringExtra("mensaje"); // Localiza la vista de texto txtmsg = (TextView) findViewById(R.id.message); // Establecer los datos en TextView txtmsg.setText(mensaje); } }
En esta actividad, usamos una intención para recuperar los datos de la clase GCMIntentService y configurarlos en TextView .
A continuación, cree un diseño gráfico XML para GCMMessageView. Vaya a res > diseño > Haga clic con el botón derecho en diseño > Nuevo > Archivo XML de Android
Asigne un nombre a su nuevo archivo XML messageview.xml y pegue el siguiente código.
vista de mensajes .xml
<?versión xml="1.0" codificación="UTF-8"?> <RelativeLayout xmlns_android="http://schemas.android.com/apk/res/android" xmlns_herramientas="http://esquemas.android.com/herramientas" android_layout_width="fill_parent" android_layout_height="fill_parent" > <Vista de texto android_id="@+id/msglbl" android_layout_width="wrap_content" android_layout_height="wrap_content" android_text="@cadena/msglbl" /> <Vista de texto android_id="@+id/mensaje" android_layout_width="wrap_content" android_layout_height="wrap_content" android_layout_toRightOf="@+id/msglbl" /> </RelativeLayout>
Producción:
A continuación, cambie el nombre y los textos de la aplicación. Abra su strings.xml en su carpeta res > valores y pegue el siguiente código.
cadenas.xml
<?versión xml="1.0" codificación="utf-8"?> <recursos> <string name="app_name">Tutorial de GCM</string> <string name="hello_world">¡Hola mundo!</string> <string name="menu_settings">Configuración</string> <string name="regbutton">Registrar dispositivo</string> <string name="msglbl">"Mensaje: "</string> </recursos>
En su AndroidManifest.xml , debemos declarar una actividad y permisos para permitir que la aplicación se comunique con GCM y nuestro servidor web PHP. Puede consultar las pautas de permisos aquí o simplemente seguir el código a continuación .
Abra su AndroidManifest.xml y pegue el siguiente código.
AndroidManifest.xml
<?versión xml="1.0" codificación="utf-8"?> <manifiesto xmlns_android="http://schemas.android.com/apk/res/android" paquete="com.androidbegin.gcmtutorial" android_versionCode="1" android_versionName="1.0" > <usos-sdk android_minSdkVersion="11" android_targetSdkVersion="15" /> <permiso android_name="com.androidbegin.gcmtutorial.permission.C2D_MESSAGE" android_protectionLevel="firma" /> <usos-permiso android_name="com.androidbegin.gcmtutorial.permission.C2D_MESSAGE" /> <usos-permiso android_name="com.google.android.c2dm.permission.RECEIVE" /> <usos-permiso android_name="android.permission.WAKE_LOCK" /> <aplicación android_allowBackup="falso" android_icono="@dibujable/ic_launcher" android_etiqueta="@cadena/nombre_aplicación" > <actividad android_name=".GCMMainActivity" android_launchMode="singleTask" > <intent-filter> <acción android_name="android.intent.action.MAIN" /> <categoría android_name="android.intent.category.LAUNCHER" /> </intent-filter> </actividad> <actividad android_name=".GCMMessageView" > </actividad> <servicio android_name=".GCMIntentService" /> <receptor android_name="com.google.android.gcm.GCMBroadcastReceiver" android_permiso="com.google.android.c2dm.permiso.ENVIAR" > <intent-filter> <acción android_name="com.google.android.c2dm.intent.RECEIVE" /> <acción android_name="com.google.android.c2dm.intent.REGISTRO" /> <categoría android_name="com.androidbegin.gcmtutorial" /> </intent-filter> </receptor> </aplicación> </manifiesto>
Producción:
Cree un servidor PHP simple para comunicarse con GCM.
Hemos preparado un servidor PHP de muestra. Enlace: https://www.androidbegin.com/tutorial/gcm.html
Producción:
Para alojar su propio archivo de servidor, cargue ambos códigos fuente PHP del lado del servidor en una carpeta en la raíz de su servidor, ejecute gcm.html .
Código fuente PHP del lado del servidor:
[etiqueta wpfilebase = ID de archivo = 41 tpl = botón de descarga /]
gcm.html
<html> <cabeza> <title>AndroidBegin - Tutorial de GCM de Android</title> <enlace rel="icono" tipo="imagen/png" href="https://www.androidbegin.com/wp-content/uploads/2013/04/favicon1.png"/> </cabeza> <cuerpo> <a href="http://www.AndroidBegin.com" target="_blank"> <img src="https://www.androidbegin.com/wp-content/uploads/2013/04/Web-Logo.png" alt="AndroidBegin.com"></br></a></br > <forma acción="gcm_engine.php" método="publicación"> Clave API de Google (con bloqueo de IP): <INPUT size=70% TYPE="Text" VALUE="" NAME="apiKey"></br> Obtenga su clave API de Google: <a href="https://code.google.com/apis/console/" target="_blank">API de Google</a></br></br> <img src="https://www.androidbegin.com/wp-content/uploads/2013/05/Google-API-Key.png" alt="Clave de API de Google" ></br></br> ID de registro del dispositivo: <INPUT size=70% TYPE = "Text" VALUE="" NAME = "registrationIDs"></br></br> Toque el botón Registrar en su aplicación de tutorial de GCM y localice el ID de registro del dispositivo en LogCat</br> <img src="https://www.androidbegin.com/wp-content/uploads/2013/05/Device-Registration-ID.png" alt="ID de registro del dispositivo" ></br></br> Mensaje de notificación: <INPUT size=70% TYPE = "Text" VALUE="" NAME = "message"></br></br> <tipo de entrada="enviar" valor="Enviar notificación"/> </formulario> </cuerpo> </html>
gcm_engine.php
<?php // Mensaje a enviar $mensaje = $_POST['mensaje']; // Establecer variables POST $url = 'https://android.googleapis.com/gcm/send'; $campos = matriz( 'identificadores_de_registro' => matriz($_POST['identificadores_de_registro']), 'datos' => matriz( "mensaje" => $mensaje), ); $encabezados = matriz( 'Autorización: clave=' . $_POST['clave de API'], 'Tipo de contenido: aplicación/json' ); // Abrir conexión $ch = curl_init(); // Establecer la url, número de variables POST, datos POST curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_POST, verdadero ); curl_setopt( $ch, CURLOPT_HTTPHEADER, $encabezados); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $campos ) ); // Ejecutar publicación $resultado = curl_exec($ch); // Conexión cercana curl_close($ch); echo $resultado; ?>
ID de registro del dispositivo
Para recuperar su ID de registro de dispositivo , ejecute su proyecto en Eclipse en un dispositivo AVD o Android.
Toque el botón Registrar dispositivo
Abra su LogCat , escriba » onRegistrado » en el cuadro de búsqueda.
Su ID de registro de dispositivo debe ser algo como esto:
APA91bFQCD9Ndd8uVggMhj1usfeWsKIfGyBUWMprpZLGciWrMjS-77bIY24IMQNeEHzjidCcddnDxqYo-UEV03xw6ySmtIgQyzTqhSxhPGAi1maf6KDMAQGuUWc6L5Khze8YK9YrL9I_WD1gl408ZAS_9Thr
Producción:
Código fuente
[purchase_link id=”7926″ text=”Comprar para descargar el código fuente” style=”button” color=”green”]