Android Google Cloud Messaging GCM usando PHP Tutorial

Mensajería en la nube de Google

  1. Vaya a  la consola de API de Google  y haga clic en Crear proyecto .
  2. Encienda Google Cloud Messaging para Android .
  3. Vaya a Acceso API en el menú de la barra lateral y haga clic en Crear nueva clave de servidor.
  4. Haga clic en el botón Crear para continuar.
  5. 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.
  6. 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

  1. Abra Eclipse y haga clic en Android SDK Manager
  2. Busque Google Cloud Messaging para la biblioteca de Android y haga clic en Instalar. 
  3. Localice la carpeta de la biblioteca GCM de Android descargada .
  4. 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:
Diseño XML de GCMMainActivity

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:

Diseño XML de GCMMessageView

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:

Captura de pantalla del cliente de GCM

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:

Captura de pantalla del lado del servidor GCM

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

Toque el botón Registrar dispositivo

Abra su LogCat , escriba » onRegistrado » en el cuadro de búsqueda.

Id. de registro del dispositivo Eclipse LogCat

Su ID de registro de dispositivo debe ser algo como esto:

APA91bFQCD9Ndd8uVggMhj1usfeWsKIfGyBUWMprpZLGciWrMjS-77bIY24IMQNeEHzjidCcddnDxqYo-UEV03xw6ySmtIgQyzTqhSxhPGAi1maf6KDMAQGuUWc6L5Khze8YK9YrL9I_WD1gl408ZAS_9Thr

Producción:

Captura de pantalla del tutorial de Android GCM

Captura de pantalla del tutorial de Android GCM

Código fuente

[purchase_link id=”7926″ text=”Comprar para descargar el código fuente” style=”button” color=”green”]