Taller Android Party: Automatic API REST + Notificaciones PUSH

66
Automatic API REST + Notificaciones PUSH Alejandro Esquiva Rodríguez (@alex_esquiva) utomatic API REST: Simplifica tus consultas by Geeky Theory is licensed under a Creative Commons Reconocimiento-NoComercial-Compar tirIgual 4.0 Internacional License .

description

Taller en el Android Party 2014 sobre Automatic API REST y Notificaciones PUSH

Transcript of Taller Android Party: Automatic API REST + Notificaciones PUSH

Page 1: Taller Android Party: Automatic API REST + Notificaciones PUSH

Automatic API REST+

Notificaciones PUSHAlejandro Esquiva Rodríguez

(@alex_esquiva)

Automatic API REST: Simplifica tus consultas by Geeky Theory is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.

Page 2: Taller Android Party: Automatic API REST + Notificaciones PUSH

Objetivo del Taller

Page 3: Taller Android Party: Automatic API REST + Notificaciones PUSH

Herramientas que vamos a usar

• http://androidparty.geekytheory.com/material.rar• http://www.easyphp.org/save-easyphp-devservervc9-latest.php

Page 4: Taller Android Party: Automatic API REST + Notificaciones PUSH

Automatic API REST

Page 5: Taller Android Party: Automatic API REST + Notificaciones PUSH

¿Qué es una API REST?

API

• Una API representa una interfaz de comunicación entre componentes de software.

Page 6: Taller Android Party: Automatic API REST + Notificaciones PUSH

¿Qué es una API REST?

REST

• Transferencia de estado Representacional.• Está orientado a transferencia de recursos.• Arquitectura cliente/servidor sin estado: ni el cliente ni el servidor

necesitan recordar ningún estado de las comunicaciones entre mensajes.

• Hace uso del protocolo HTTP.• Cada recurso es únicamente accesible a través de su URI.• Los datos son generalmente ofrecidos en formato JSON o XML .• Control de errores.

Page 7: Taller Android Party: Automatic API REST + Notificaciones PUSH

¿Qué es una API REST?

Cada recurso es accesible a través de una única URI.

URIs

Page 8: Taller Android Party: Automatic API REST + Notificaciones PUSH

¿Qué es una API REST?

El cliente hace peticiones al servidor usando el protocolo HTTP. El servidor le responde a través del mismo protocolo.

Arquitectura Cliente - Servidor

Page 9: Taller Android Party: Automatic API REST + Notificaciones PUSH

¿Qué es una API REST?

• GETPedir información a un recurso.

• POSTCreate: Orden para insertar información.Update: Modificar información.

• PUTCreate: Orden para insertar información.Update: Modificar información.

• DELETEEliminar información del servidor.

Operadores API REST

Page 10: Taller Android Party: Automatic API REST + Notificaciones PUSH

¿Qué es una API REST?

JSON

Formatos de salida

XML

Page 11: Taller Android Party: Automatic API REST + Notificaciones PUSH

¿Qué es una API REST?

Ejemplos de APIs

Page 12: Taller Android Party: Automatic API REST + Notificaciones PUSH

Android y APIs

Necesidad

• Base de datos externa.

• Interacción de datos entre servidor y cliente.

• Aplicaciones multiplataforma

Page 13: Taller Android Party: Automatic API REST + Notificaciones PUSH

Automatic API REST

¿Qué es?• Una herramienta Open Source.

• Crea una completa API de tu base de datos MySQL o MariaDB.

• Proporciona una red automática de enlaces que proporcionan la información en JSON o XML.

• Intercambia información entre distintos lenguajes de programación.

• Panel de control para gestionar la privacidad de las tablas o campos de la base de datos.

http://AutomaticApiRest.info

Page 14: Taller Android Party: Automatic API REST + Notificaciones PUSH

Automatic API REST

Especificaciones

• Creación de enlaces únicos para cada recurso (URIs)

• Gestión de privacidad de las tablas.

• No altera la estructura de la base de datos.

• Obtener datos (GET) en formato JSON y XML.

• Insertar datos (POST) a través de enlaces únicos.

• Modificar Datos (POST) a través de enlaces únicos.

• Gestión de errores.

Page 15: Taller Android Party: Automatic API REST + Notificaciones PUSH

Automatic API REST

Modo de empleo• Aplicación de servidor

1. Instalar Automatic Api Rest en un servidor con soporte para PHP y MySQL.

2. Configurar el archivo config.php con los credenciales del servidor y apuntar a nuestra base de datos.

3. Entrar en el panel de control con los credenciales que hemos indicado en el archivo config.php

4. Indicar que tablas y campos son privados, deshabilitando la opción de obtener/añadir/modificar/eliminar datos.

Page 16: Taller Android Party: Automatic API REST + Notificaciones PUSH

Automatic API REST

Modo de empleo (GET)

• Aplicación de cliente (java, Python, c++,…)

1. Seleccionar los enlaces que queremos consultar desde el panel de control de Automatic API Rest.

2. Obtener el json/xml de la petición.

3. Parsear datos obtenidos.

Page 17: Taller Android Party: Automatic API REST + Notificaciones PUSH

Automatic API REST

Modo de empleo (POST)

• Aplicación de cliente (java, Python, c++,…)

1. Seleccionar el enlace donde queremos enviar la información.

2. Preparamos un json o xml (también se puede insertar desde parámetros POST) con los datos a insertar o modificar.

3. Enviar la petición

4. Obtenemos la respuesta con los resultados de la consulta

Page 18: Taller Android Party: Automatic API REST + Notificaciones PUSH

Cuando Usar Automatic API REST

• ¿Tienes una aplicación que necesite obtener datos de una base de datos externa?

• ¿Tienes una aplicación que sea multiplataforma?

• ¿Quieres ahorrar tiempo en el desarrollo de una API?

Page 19: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Base de datos

Descarga de la base de datos de prueba.http://dev.mysql.com/doc/index-other.html

• Base de datos: World• Número de tablas: 3• city: 4079 filas• country: 239 filas• countrylanguage: 991 filas

city

countrylanguage

country

Page 20: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Instalación

1. Descargamos Automatic API REST.

2. Extraer el zip y subir todo el directorio a la raíz principal de vuestro servidor.

3. Abrir el archivo config.php y rellenar todos los campos con los credenciales de la base de datos.

4. Visitar

http://tudominio.com/AutomaticaApiRest

Page 21: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Config.php

• SERVER: localhost

• USER: Usuario de la base de datos

• PASS: Contraseña del usuario de la base de datos

• DB: Base de datos a la que queremos apuntar

• USERADMIN: cuenta de administrador de AAR

• PASSADMIN: contraseña de administrador

Page 22: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Log In

http://tudominio.com/AutomaticaApiRest

Page 23: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Panel de Control

Page 24: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Navegación

Home: Enlace al inicio del panel de control.

Documentation: Documentación del proyecto. [En Construcción]

Black List: Gestión de las tablas privadas.

GitHub: Enlace al proyecto en GitHub

Close: Cierre de la sesión.

Page 25: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Gestión de tablas

Table Name: Nombre de la tabla de la base de datos.

API Link: Dirección única del recurso donde vamos a consultar todos los datos en formato JSON de la tabla.

Items: Número de Items que tiene la tabla.

Show Table: Mostrar una tabla con los datos de la tabla seleccionada.

Privacity: Esta casilla muestra si la tabla es pública o privada, en caso de que sea privada no se podrá ni consultar ni gestionar la tabla.

Page 26: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Gestión de campos

Column: Nombre del campo de la tabla seleccionada.

API Link: Enlace que genera un JSON con toda la información del campo encapsulado.

Show Table: Ver una tabla con los datos del campo seleccionado.

Select: Consulta personalizada (Ver siguiente punto).

Privacity: Privacidad del campo.

Page 27: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Consulta Personalizada

Observamos que podemos personalizar la consulta de datos, si por ejemplo sólo nos interesa el ID y el nombre de los últimos 5 registros de la tabla city ordenados por el campo Name generamos un enlace que exactamente nos ofrezca eso.

Page 28: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Black List

La Black List muestra todos las tablas y columnas que no permitimos ni obtener ni insertar datos. Desde esta misma tabla podemos eliminar los registros de la Black List.

Page 29: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Salida JSON

{"data":[{"0":"\u00b4s-Hertogenbosch","Name":"\u00b4s-Hertogenbosch","1":"Noord-Brabant","District":"Noord-Brabant","2":"129170","Population":"129170"},{"0":"\u0160umen","Name":"\u0160umen","1":"Varna","District":"Varna","2":"94686","Population":"94686"},{"0":"\u0160t\u0161olkovo","Name":"\u0160t\u0161olkovo","1":"Moskova","District":"Moskova","2":"104900","Population":"104900"},{"0":"\u0160ostka","Name":"\u0160ostka","1":"Sumy","District":"Sumy","2":"90000","Population":"90000"},{"0":"\u0160iauliai","Name":"\u0160iauliai","1":"\u0160iauliai","District":"\u0160iauliai","2":"146563","Population":"146563"}],"dbInfo":["Name","District","Population"]}

Page 30: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Aplicación Cliente - Java

Obtener información en JAVA

• Creación de una clase para la obtención y gestión de datos.

• Creación de métodos necesarios para parsear JSONs y obtener los datos a través de un enlace dado.

Page 31: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Aplicación Cliente - Java

getJSON

• Obtiene un JSON a través de un enlace dado

Page 32: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Aplicación Cliente - Java

getDataStringArray

• Hace uso de la librería json-simple-1.1.1.jar

• Devuelve un array multidimensional de Strings con la información del JSON

Page 33: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Aplicación Cliente - Java

setData

Page 34: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Aplicación Cliente - Java

Ejemplo 1: Obtención de un dato

Page 35: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Aplicación Cliente - Java

Ejemplo 2: Inserción de datos

Page 36: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Aplicación Cliente - Java

Ejemplo 3: Código de errores [Invalid Parameters]

Page 37: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ejemplo de uso: Aplicación Cliente - Java

Ejemplo 4: Código de errores [Unauthorized]

Campo privada: CountryCode

Page 38: Taller Android Party: Automatic API REST + Notificaciones PUSH

Automatic API REST (alpha/beta)

Actualmente Automatic API REST es un projecto alpha, falta implementar mejoras y crear una documentación para cada tipo de lenguaje.

Page 39: Taller Android Party: Automatic API REST + Notificaciones PUSH

Líneas Futuras de AAR

• Documentación de cada plataforma

• Creación de librerías para cada plataforma que facilite el uso de AAR

• Implementación de seguridad con OAUTH 2.0

• Dar soporte a consultas complejas, WHERE, INNER, etc.

• Escoger permisos de cada tabla/campo, elegir permisos de cada campo.

• Gestión óptima de URIs

Page 40: Taller Android Party: Automatic API REST + Notificaciones PUSH

Proyecto Open Source

• Automatic API REST es un proyecto Open Source, todo el mundo es bienvenido a colaborar.

• Para colaborar, enviar directamente vuestros pull request o enviar un correo a [email protected]

Page 41: Taller Android Party: Automatic API REST + Notificaciones PUSH

Notificaciones PUSH

Page 42: Taller Android Party: Automatic API REST + Notificaciones PUSH

Ecosistema

1. El dispositivo Android envía el ID de aplicación de GCM.

2. El servicio GCM devuelve un Id de registro único por aplicación y dispositivo.

3. Enviamos este id a nuestra aplicación de servidor.

4. Almacenamos el id en la base de datos externa.

5. Si queremos enviar una notificación, obtenemos el id de la base de datos y enviamos el mensaje a GCM.

6. GCM enviará el mensaje a nuestra aplicación.

Page 43: Taller Android Party: Automatic API REST + Notificaciones PUSH

Objetivo del Taller

Page 44: Taller Android Party: Automatic API REST + Notificaciones PUSH

Pasos a seguir

1. Registrarse en Google Cloud Messaging (GCM) desde Google API Console y obtener el Sender ID y la API key.

2. Crear una base de datos donde almacenaremos los ids de los usuarios.

3. Instala Automatic Api Rest (Opcional) y apuntar a la base de datos creada.

4. Crear una aplicación de servidor donde este a la escucha de ordenes para enviar notificaciones PUSH.

5. Crear una aplicación de cliente (Android) para obtener los Ids y almacenarlas en la base de datos y poder enviar notificaciones.

Page 46: Taller Android Party: Automatic API REST + Notificaciones PUSH

Obtener Sender ID y API Key

2. Obtener Sender ID:

Page 47: Taller Android Party: Automatic API REST + Notificaciones PUSH

Obtener Sender ID y API Key

3. Activar API

Page 48: Taller Android Party: Automatic API REST + Notificaciones PUSH

Obtener Sender ID y API Key

4. Activar Google Cloud Messaging for Android

Page 49: Taller Android Party: Automatic API REST + Notificaciones PUSH

Obtener Sender ID y API Key

5. Ir a Credenciales

Page 50: Taller Android Party: Automatic API REST + Notificaciones PUSH

Obtener Sender ID y API Key

6. Generar API Key

Page 51: Taller Android Party: Automatic API REST + Notificaciones PUSH

Creación de una base de datos externa

Page 52: Taller Android Party: Automatic API REST + Notificaciones PUSH

Instalamos Automatic API REST

Page 53: Taller Android Party: Automatic API REST + Notificaciones PUSH

Crear una aplicación de servidor para enviar Notificaciones

sendNotification.php

Page 54: Taller Android Party: Automatic API REST + Notificaciones PUSH

Aplicación Android

Page 55: Taller Android Party: Automatic API REST + Notificaciones PUSH

Aplicación Android

Librerias

https://dl-ssl.google.com/android/repository/gcm_r03.zip

GCM

https://json-simple.googlecode.com/files/json-simple-1.1.1.jar

json-simple

Page 56: Taller Android Party: Automatic API REST + Notificaciones PUSH

Aplicación Android

AndroidManifest.xml

Page 57: Taller Android Party: Automatic API REST + Notificaciones PUSH

Aplicación Android

Config.java

Page 58: Taller Android Party: Automatic API REST + Notificaciones PUSH

Aplicación Android

AutomaticApiRestClient.java

Page 59: Taller Android Party: Automatic API REST + Notificaciones PUSH

Aplicación Android

Controller.java

Page 60: Taller Android Party: Automatic API REST + Notificaciones PUSH

Aplicación Android

RegisterActivity.java

Page 61: Taller Android Party: Automatic API REST + Notificaciones PUSH

Aplicación Android

ListviewActivity.java

Page 62: Taller Android Party: Automatic API REST + Notificaciones PUSH

Aplicación Android

SendMessageActivity.java

Page 63: Taller Android Party: Automatic API REST + Notificaciones PUSH

Aplicación Android

GCMIntentService.java

Page 64: Taller Android Party: Automatic API REST + Notificaciones PUSH

Referencias

• Tutorial sobre Notificaciones PUSH• http://androidexample.com/Android_Push_Notifications_using_Google_Cloud_Messaging_GCM/index.

php?view=article_discription&aid=119&aaid=139

• Serie de tutoriales sobre JSON• http://geekytheory.com/category/geeky-theory-2/tutoriales-2/programacion-web/json/

• Tutorial sobre Automatic Api Rest• http://geekytheory.com/automatic-api-rest/

• Serie de tutoriales sobre JAVA – PHP –MYSQL• http://geekytheory.com/category/java-php-mysql/

• Tutoriales Sobre PHP & MySQL• http://geekytheory.com/category/geeky-theory-2/tutoriales-2/programacion-web/php-mysql/

Page 65: Taller Android Party: Automatic API REST + Notificaciones PUSH

Gracias

Alejandro Esquiva Rodriguez

Page 66: Taller Android Party: Automatic API REST + Notificaciones PUSH

/aesquiva

http://geekytheory.com

@alex_esquiva @GeekyTheory

http://AutomaticApiRest.info

/geekytheory