Notificaciones Push para IOS (parte 2)

Abr 7, 2014 | iOS | 0 Comentarios

IOS

Buenas Tardes, la semana pasada ya dimos las primeras pinceladas de las notificaciones push para IOS. En esta ocasión vamos a completarlas. Siguiendo este blog podrás generar notificaciones push para tu aplicación, incluyendo la parte del servidor que se programará en PHP utilizando la potencialidad que nos ofrece el componente de desarrollo symfony2.

Como ya sabrás apple no permite realizar demasiadas tareas en segundo plano, para evitar consumos excesivos de batería. Por lo que si una aplicación desea notificar algo en un momento determinado, ¿cómo lo hace?.

Utiliza las notificaciones push:

  • Se entregan inmediatamente. Si no se pueden entregar se almacenan por un tiempo limitado
  • Se gestionan mediante un servidor

¿Qué se necesita para poder enviar notificaciones?:

  • Un dispositivo real. No se pueden recibir desde un simulador.
  • Ser miembro del programa de desarrollo de Apple (developer.apple.com). Es necesario generar un «Provisioning Profiles», además de un certificado SSL que se instalará en el servidor
  • Un servidor para el envío. Se programará en PHP.
Notificaciones Push para IOS (parte 2)

Funcionamiento:

  1. Cuando la aplicación se ejecuta pregunta al usuario si desea recibir notificaciones PUSH. Si el usuario lo acepta, el sistema solicita al APNS (Apple Push Notificacion Service).
  2. El servidor apple genera el device token y se lo envía a la aplicación
  3. La aplicación envía a nuestro servidor propio el device token. El servidor lo almacenará para poder generar las notificaciones.
  4. El servidor genera la notificación y se la envía al APNS. En nuestro caso, las notificaciones se generaran con un formulario simple en una web.
  5. El APNS envía la notificación a la aplicación.

¿Cómo crear una notificación push?

Nuestro servidor es el encargado de generar el mensaje en la notificación. Ha de tener las siguientes características:

  • Es un mensaje corto que contiene el «device token», mensaje y algunos bytes más
  • Ha de tener formato JSON
  • 256 bytes como máximo
  • Los claves fuera de «aps» no se utilizan, pero pueden ser interesantes para tu aplicación

Un ejemplo de mensaje es:

En este post podrás leer

{

«aps»: {

«alert» : «Mensaje de prueba»,

«badge» : 125

},

«key-adicional» : 1

}

Puesto que es tamaño es limitado, es conveniente no incluir espacios ni tabulaciones innecesarios en el mensaje.

 

{«aps»: {«alert» : «Mensaje de prueba»,»badge» : 125},»key-adicional» : 1}

 

Provisioning Profiles y Generación de Certificados:

Como comentamos antes para poder utilizar las notificaciones push es necesario generar un certificado para firmar la aplicación y de esta forma poder instalarla en un dispositivo real. Además, para poder crear la notificaciones se necesita un certificado SSL que se instalará en nuestro servidor.

Apple tiene 2 tipos de certificados:

Producción: Es el certificado que se utiliza cuando vamos a distribuir una aplicación en al Apple Store.

Desarrollo: Son los certificados que se utilizan para la depuración de aplicaciones. En nuestro caso, vamos a utilizar este. El servidor ha de contener el certificado SSL relacionado con este.

Obtención del certificado CSR(Certificate Signing Request)

Para poder generar el Provisioning Profile es necesario crear antes un certificado digital basado en clave pública y clave privada. Para ello, vamos a «Acceso a llaveros» -> «Asistente para certificados» -> «Solicitar un certificado de una autoridad de certificación»

Notificaciones Push para IOS (parte 2)

Se fija el nombre que se le quiere dar al certificado. Tambien se marca la opción de que se guarde en disco, para almacenarlo en nuestro ordenador. Y damos a continuar. Por ultimo se selecciona el nombre que se le quiere dar al certificado en mi caso «NotificacionesPUSH.certSigningRequest»

Notificaciones Push para IOS (parte 2)

La clave privada ya se ha almacenado en el «Acceso a llaveros». Ya se puede exporta para generar el «Provioning Profile»

Notificaciones Push para IOS (parte 2)

Se almacena con el nombre «NotificacionPUSH.p12»

Notificaciones Push para IOS (parte 2)

Por último se fija la clave de acceso al certificado

Notificaciones Push para IOS (parte 2)

Creamos el App ID y el certificado SSL para el servidor

Nos identificamos en «developer apple», vamos a la parte de «Certificados, identificadores y Profile» y entramos en «Identificadores»

 

Notificaciones Push para IOS (parte 2)

Ahora vamos a crear un nuevo «App ID», para ello pulsamos en botón +

Notificaciones Push para IOS (parte 2)

A continuación hemos de introducir los siguientes datos:

  • App Id description: Nombre de la aplicación
  • Explicit App ID: Identificador de la aplicación. En xcode lo podemos consultar como «Bundle Identifier». En las características generales del proyecto
  • App Services: Seleccionamos notificaciones push

Y pulsamos continuar.

 

Notificaciones Push para IOS (parte 2)

A continuación, nos pide que confirmemos la información

Notificaciones Push para IOS (parte 2)

Nos debe de aparecer el nuevo «App ID» en el listado.

Notificaciones Push para IOS (parte 2)

Pulsamos sobre el «App ID» notificacionesPUSH y nos aparece algo similar a la siguiente imagen.

Podemos ver que en la parte de notificaciones push dos circulos de color naranja, que significa que has de configurarlas. Para nuestro ejemplo, solo se va a configurar la sección de «Developement». Pulsamos «Edit»

Notificaciones Push para IOS (parte 2)

Creamos el certificado SSL en la parte de «Developement» que se instalará en nuestro servidor para realizar las pruebas de la aplicación.

Notificaciones Push para IOS (parte 2)

Se sube el certificado que se ha generado en nuestro ordenador.

Para finalizar nos decargamos el certificado SSL que genera apple para instarlo posteriormente en nuestro servidor.

El certificado de desarrollo solo es válido durante 3 meses.

Notificaciones Push para IOS (parte 2)

Generamos el archivo .PEM

Es el archivo que se utilizará en el servidor. Para generarlo necesitamos:

  • Certificado SSL (aps_development.cer)

Una vez descargado el archivo, hacemos doble click sobre él y se nos abrirá el «Acceso a llaveros». En la parte de certificados se nos ha instalado el nuevo certificado. Pulsamos sobre la flecha y lo abrimos y exportamos el certificado a un archivo .p12 que será el que se utilizará para el generar el .pem y subirlo al servidor.

El certificado y la clave primaria se convierten para que sea más fácil de utilizar en PHP. Se convierte con la siguiente orden:

openssl pkcs12 -in notificacionesPUSH.p12 -out notificacionesPUSH.pem -nodes -clcerts

Enter Import Password:

MAC verified OK

Generacion del «Provisioning Profile»

 Vamos a la parte de «Provisioning Profile» y pulsamos sobre el boton + para crear uno nuevo

Notificaciones Push para IOS (parte 2)

Se selecciona el tipo de «Profile»

Notificaciones Push para IOS (parte 2)

Seleccionamos el «App ID» generado anteriormente

Notificaciones Push para IOS (parte 2)

Seleccionamos el certificado

Notificaciones Push para IOS (parte 2)

A continuación los dispositivos

Notificaciones Push para IOS (parte 2)

Se le da un nombre a la aplicación

Notificaciones Push para IOS (parte 2)

Nos descargamos el «Profile»

Notificaciones Push para IOS (parte 2)

Creamos una aplicación simple:

Vamos a xCode y creamos un nuevo proyecto con la plantilla «Single View Application». Hemos de ponerle el mismo nombre que el identificador que se utilizó para generar los certificados. Si no lo hiciesemos, la aplicación no funcionaría.

Notificaciones Push para IOS (parte 2)

Lo primero que hemos de hacer es indicar al servidor de apple que esta aplicación desea recibir notificaciones push. Para ello, vamos a appDelegate.m y modificamos la función (BOOL) application: didFinishLaunchingWithOptions: con el siguiente código:

[[UIApplicationsharedApplicationregisterForRemoteNotificationTypes🙁UIRemoteNotificationTypeAlertUIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

Si ejecutamos la aplicación nos ha de preguntar si deseamos recibir notificaciones:

Notificaciones Push para IOS (parte 2)

Hemos de implementar el método que recibe el token del servidor:

 

#pragma mark Push Notifications Methods 

– (void)application:(UIApplication *)application

didRegisterForRemoteNotificationsWithDeviceToken:

(NSData *)deviceToken {

NSLog(@»Mi device token es %@», deviceToken);

}

Una vez tenemos el token podemos registrarlo en el servidor con una petición POST como se indica en este post

Tambien has de implementar la función que recibe los errores por si se produce alguna.

– (void)application:(UIApplication *)application

didFailToRegisterForRemoteNotificationsWithError:

(NSError *)error{

NSLog(@»Error al obtener el token. Error: %@», error);

}

Notificaciones Push para IOS (parte 2)

Implementación del servidor con Symfony2:

El proyecto va a ser muy simple. Se genera un nuevo proyecto con Netbeans, por ejemplo. Se crea el controlador principal que va a enviar las notificacionesPUSH. Que contendrá el siguiente código:

public function inicioAction(){

// Se pone el token sin espacion
$deviceToken = ‘DEVICETOKEN‘;

// Se fija la contraseña del certificado
$passphrase = ‘CONTRASEÑA’;

// Mensaje a enviar
$message = ‘Mi primera notificacion!’;

$ctx = stream_context_create();

// Se obtiene el certificado
stream_context_set_option($ctx, ‘ssl’, ‘local_cert’,

‘certificado/NotificacionesPUSH.pem’);

stream_context_set_option($ctx, ‘ssl’, ‘passphrase’, $passphrase);

// Se conecta cone l servidor
$fp = stream_socket_client(‘ssl://gateway.sandbox.push.apple.com:2195’,

$err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT,

$ctx);

if (!$fp)

exit(«Failed to connect: $err $errstr» . PHP_EOL);

echo ‘Connected to APNS’ . PHP_EOL;

// Se crea el payload

$body[‘aps’] = array(
‘alert’ => $message,
‘sound’ => ‘default’
);

// Codificación a JSON
$payload = json_encode($body);

// Se crea la notificación
$msg = chr(0) . pack(‘n’, 32) . pack(‘H*’, $deviceToken) . pack(‘n’, strlen($payload)) . $payload;

// Se envía al servidor
$result = fwrite($fp, $msg, strlen($msg));

if (!$result)

echo ‘Message not delivered’ . PHP_EOL;

else

echo ‘Message successfully delivered’ . PHP_EOL;

fclose($fp);

return $this->render(‘notificacionesBundle:Principal:inicio.html.twig’);

}

Ejecución del servidor:

Si ejecutamos el servidor en varias ocasiones, vemos que se van recibiendo las notificaciones en nuestro dispositivo. Cuando pulsamos sobre alguna se nos abrirá la aplicación.

Notificaciones Push para IOS (parte 2)

Podéis encontrar el código del proyecto en github

Para facilitar la programación del servidor también os dejamos el código en github

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

.Estás en el punto de partida?

Contacta con nosotros y cuéntanos tu proyecto.

Mapa de ubicación dentro de la sección método App&Web
Estamos en:

C/ Gracia, 12 1ª Planta Granada (18004) Granada

623 02 64 34

 contacto@appandweb.es

Follows
Shares
Share This
¿Necesitas ayuda?