Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud....

30
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-13 Depto. Ciencia de la Computación e IA Servicios iOS Sesión 2: iCloud y Notificaciones push

Transcript of Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud....

Page 1: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-13 Depto. Ciencia de la Computación e IA

Servicios iOS

Sesión 2: iCloud y Notificaciones push

Page 2: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Índice de contenidos• iCloud• ¿Qué es y cómo funciona?• Ejemplos de uso en aplicaciones móviles• Integrando iCloud

• Notificaciones push• ¿Qué son y cómo funcionan?• Plataformas externas: Urban Airship• Integrando notificaciones push

2

Page 3: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

iCloud• iCloud• ¿Qué es y cómo funciona?• Ejemplos de uso en aplicaciones móviles• Integrando iCloud

3

Page 4: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

iCloud: ¿Qué es y cómo funciona? (1)• Servicio para almacenar documentos y datos en la nube.• Posibilidad de acceso a todo lo almacenado desde cualquier

dispositivo iOS.• Ahora integrado en Mountain Lion (OS X 10.8)• Cada usuario deberá tener una cuenta iTunes.• Todos los dispositivos deberán estar configurados con la misma

cuenta.• La sincronización será automática e invisible al usuario.

4

Page 5: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

iCloud: ¿Qué es y cómo funciona? (2)• Ventajas de su uso para los desarrolladores:• No hará falta contratar un servidor externo que sirva de

almacenamiento para datos de nuestra aplicación -> Ahorro de costes.

• No tendremos que programar una API de acceso a servicios externos, Apple lo hace por nosotros -> Menor tiempo de desarrollo.

• Integración con Core Data.

5

Page 6: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

iCloud: ¿Qué es y cómo funciona? (3)• Restricciones de uso:• Límite de capacidad: Máximo 5 GB. Uso responsable por parte del

desarrollador.

• Sincronizaciones: Resolución de conflictos.

• Configuración de las autorizaciones (entitlements) en el portal de desarroladores y en XCode.

• Compatibilidad si no hay iCloud: El desarrollador debe de gestionar este caso.

• No compatible al 100% con el simulador de iPhone.

6

Page 7: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

iCloud: ¿Qué es y cómo funciona? (4)• Existen dos formas de implementar iCloud:• Almacenamiento de documentos: Almacenamiento de ficheros de

cualquier tipo en la nube.• Almacenamiento de datos tipo clave-valor: Almacenamiento de

objetos tipo diccionario (clave-valor). Máximo tamaño permitido: 64KB por objeto.

7

Page 8: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

iCloud• iCloud• ¿Qué es y cómo funciona?• Ejemplos de uso en aplicaciones móviles• Integrando iCloud

8

Page 9: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

iCloud: Ejemplos de uso• Aplicaciones de gestión documental: Compartir documentos de

texto. Ej.: Pages (Apple), TextEdit (Apple)...

• Aplicaciones de fotografía: Compartir fotos que hagamos con el iPhone o iPad entre dispositivos. Ej: iPhoto (Apple).

• Aplicaciones con calendarios: Compartir eventos de calendario entre varios dispositivos.

• Aplicaciones de gestión de tareas o recordatorios: Compartir tareas entre varios dispositivos.

• Juegos de distintos tipos: Almacenar datos de niveles, puntuaciones, etc.. entre dispositivos.

9

Page 10: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

iCloud• iCloud• ¿Qué es y cómo funciona?• Ejemplos de uso en aplicaciones móviles• Integrando iCloud

10

Page 11: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Integrando iCloud (1)• En el Provisioning Portal de Apple:• Crear un nuevo App ID.• Configurar la aplicación para que permita el acceso a iCloud.

11

Page 12: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Integrando iCloud (2)• Configuraciones previas en XCode:• Campo Entitlements: Escribimos el App ID en los campos

correspondientes.• De esta forma indicamos a Apple que esta aplicación será

compatible con iCloud.

12

Page 13: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Integrando iCloud (3)• Código que inicia iCloud• En el método didFinishLaunchingWithOptions de la clase AppDelegate.

• Indicamos en la URL el App ID completo.

13

// (1) Iniciamos iCloudNSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:@"3S952AGH46.ua.es.jtech.ejemploicloud"];

if (ubiq) { NSLog(@"AppDelegate: Entra en iCloud!"); [self cargaDocumento];} else { NSLog(@"AppDelegate: No hay acceso a iCloud (puede que estés en el simulador o que no esté configurado correctamente el dispositivo");}

Page 14: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Integrando iCloud (4)• Buscamos el documento (tipo fichero) en el iCloud del usuario:

14

- (void)cargaDocumento { //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[NSMetadataQuery alloc] init]; //Indicamos el ámbito de búsqueda (ámbito de documentos) [query setSearchScopes:[NSArray arrayWithObject: NSMetadataQueryUbiquitousDocumentsScope]]; //Creamos un predicado y lo asignamos a la query NSPredicate *pred = [NSPredicate predicateWithFormat: @"%K == %@", NSMetadataItemFSNameKey, @"text.txt"]; [query setPredicate:pred]; //Creamos una notificacion que se ejecute cuando la query haya terminado // (esta se ejecutará en segundo plano de forma asíncrona) [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(queryDidFinishGathering:) name:NSMetadataQueryDidFinishGatheringNotification object:query]; [query startQuery]; }

Page 15: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Integrando iCloud (5)• API de iCloud: https://developer.apple.com/icloud• ¡Recomendable su lectura!

• iCloud y Core Data: No muy estable actualmente.

• En contínua mejora...

15

Page 16: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Notificaciones push• Notificaciones push• ¿Qué es y cómo funciona?• Plataformas externas: Urban Airship• Integrando notificaciones push

16

Page 17: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Push: ¿Qué es y cómo funciona? (1)• Mensajes que se muestran en el dispositivo en forma de

notificación.• Objetivo: evitar la ejecución de procesos recurrentes en el

dispositivo -> Los procesos se ejecutan en el servidor.• Uso en aplicaciones como WhatsApp o Twitter.

17

Page 18: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Push: ¿Qué es y cómo funciona? (2)• Se podrán recibir distintos tipos de mensajes:• Mensajes de texto corto.• Sonidos.• Número de eventos en el icono de la aplicación (badge)• Combinación de lo anterior.

• Campañas de marketing• Incitar al usuario hacer uso de la aplicación.• Publicitar eventos o cualquier cosa a los usuarios de nuestra

aplicación.• OJO: Evitar el uso desmesurado o fraudulento.

• Necesitaremos un servidor propio o el uso de un servicio externo.

18

Page 19: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Push: ¿Qué es y cómo funciona? (3)• Esquema de funcionamiento de la tecnología:

19

Pasos:

1) El usuario acepta recibir notificaciones push.

2) Almacenamos el ID del dispositivo del usuario en nuestro servidor (en BD).

3) ... Nuestro servidor realizará los procesos internos....

4) Si nuestro servidor quiere enviar una notificación al usuario: envía un mensaje JSON al servidor de Apple (APS). Certificado SSL.

5) El APS enviará la notificación push al dispositivo del usuario.

Page 20: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Requerimientos para usar notificaciones• Un dispositivo (iPhone o iPad). Las notificaciones NO funcionan

sobre el simulador de XCode.

• Una cuenta activa de desarrollador Apple ya que deberemos de configurar un App ID, generar un certificado SSL, etc.

• Un servidor propio, será el que envie los mensajes JSON al servidor de Apple. • El servidor deberá de cumplir con unos requerimientos complejos,

necesitaremos un VPS (servidor privado virtual).• Ahorrar posibles costes y configuraciones: contratar un servicio

externo -> Ejemplo: Urban Airship, Parse...

20

Page 21: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Notificaciones push• Notificaciones push• ¿Qué es y cómo funciona?• Plataformas externas: Urban Airship• Integrando notificaciones push

21

Page 22: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Urban Airship (1)• Plataforma online para desarrolladores móviles (iOS, Android,

Blackberry...).• Ofrece servicios de in-app y de notificaciones push.• Ofrece una API bastante completa y sencilla de usar.• Ventajas de su uso:• Ahorro en costes de configuración de servidor y su mantenimiento• Ahorro en costes de implementación de todo el servicio en la

aplicación.• Servicio “extra” de notificaciones push ricas (con imágenes,

videos, etc...).• Ideal para empresas pequeñas o desarrolladores independientes.• Disponibilidad del portal online para enviar notificaciones desde un

formulario (para testeo, por ejemplo) o mediante una API.• Sistema multiplataforma.

22

Page 23: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Urban Airship (2)

23

Page 24: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Notificaciones push• Notificaciones push• ¿Qué es y cómo funciona?• Plataformas externas: Urban Airship• Integrando notificaciones push

24

Page 25: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Integrando notificaciones push (1)• Configurar un App ID en el Provisioning Portal.

• Generar un certificado SSL (desarrollo o producción).

• Configurar el lado del servidor con el certificado.

• Implementar la recepción de notificaciones en la aplicación.

25

Page 26: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Integrando notificaciones push (2)• Registramos el dispositivo para que permita recibir

notificaciones de nuestra aplicación.• En el método didFinishLaunchingWithOptions de la clase AppDelegate.

26

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

Page 27: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Integrando notificaciones push (3)• Obtenemos el token (ID) del dispositivo para almacenarlo en

nuestro servidor.

27

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

NSString *deviceTokenStr = [[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""] stringByReplacingOccurrencesOfString: @">" withString: @""] stringByReplacingOccurrencesOfString: @" " withString: @""]; NSLog(@"deviceToken: %@", deviceTokenStr); // El token deberemos de enviarlo a nuestro servidor o a un servicio externo

}

Page 28: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Integrando notificaciones push (4)• Permisos para recibir notificaciones.

28

Page 29: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

Integrando notificaciones push (5)• Enviando una notificación por Urban Airship...

29

Page 30: Servicios iOS - ua · //iCloud query: Busca si hay un fichero llamado "text.txt" en iCloud. NSMetadataQuery *query = [[ NSMetadataQuery alloc] init]; //Indicamos el mbito de b squeda

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA iCloud y Notificaciones push

• ¿Preguntas...?

30