Apple ya tiene su propio cloud y ofrece a los desarrolladores las capacidades que ya hemos visto en otros proveedores:
- Persistencia
- Notificaciones
etc...
Size: 1.89 MB
Language: es
Added: Sep 24, 2014
Slides: 49 pages
Slide Content
INTRODUCCION
A
CLOUDKIT
#NSCODERMAD_ CLOUDKIT
JUAN ANTONIO MARTIN - @BYJUANAMN
AGENDA
•Introducción
•Activar CloudKit en nuestra App
•Framework CloudKit
•Limitaciones y comparaciones
INTRODUCCIÓN
#NSCODERMAD_ CLOUDKIT
INTRODUCCIÓN
•CloudKit es una tecnología construida sobre iCloud
•Hasta ahora manejábamos información basada en
documentos
•CloudKit está pensada para trabajar con datos
estructurados (registros)
•Ahora decidimos cuando movemos datos “de” o
“hacia” iCloud
INTRODUCCIÓN
•CloudKit es una tecnología orientada al transporte de información ¿?
…. No persiste en local datos
•CloudKit proporciona mecanismos para informarnos cuando suceden
cambios en nuestros datos…
•Pero está en el lado del desarrollador la responsabilidad de acceder a
la información. Seremos responsables de:
•Decidir cuando obtenemos los datos
•Decidir cuando los guardamos
•Decidir como gestionamos los errores que puedan producirse
INTRODUCCIÓN
•La gestión de identidades/accesos/permisos en
CloudKit está basada en iCloud accounts
•nuestros usuarios deben ser usuarios de iCloud
•CloudKit está soportado en OS X e iOS
•Tenemos Bases de datos publicas y privadas
•Datos estructurados y ficheros..
CLOUDKIT FRAMEWORK
#NSCODERMAD_ CLOUDKIT
CLOUDKIT FRAMEWORK
•Framework de CloudKit de un vistazo:
•Containers
•DataBases
•Records
•Record Zones
•Rercord Identifiers
•References
•Assets
INTRODUCCIÓN
!
•Todo empieza por CK
CONTAINERS
#NSCODERMAD_ CLOUDKIT
CONTAINERS
•CKContainer es la clase que implementa esta parte de
CloudKit
•Como en otras tecnología de iCloud, CloudKit
organiza toda la información en Containers
•Un container es la representación local de una App tal
y como estaría en iCloud
•Cada App tiene un container
CONTAINERS
•Un container está dividido en dos partes: Publica/
privada
•Los datos almacenados en la parte privada solo
estarán disponibles por el usuario propietario de estos
datos
•Los datos públicos estarán disponibles para todos los
usuarios de la App
CONTAINERS
•Los datos públicos estarán disponibles aunque el
dispositivo no tenga una cuenta de iCloud
•Si necesitamos guardar información SI es necesario
que el usuario tenga una cuenta de iCloud activada
•CKContainer nos proporciona acceso a las bases de
datos del container
•publicCloudContainer o privateCloudContainer
CONTAINERS
!
•CKContainer nos proporciona un método para detectar si
el usuario tiene iCloud activo:
•- accountStatusWithCompletionHandler
•También podemos pedir o consultar permisos
•requestApplicationPermission:completionHandler
•statusForApplicationPermission:completionHandler
DEMO CONTAINERS
DATABASES
#NSCODERMAD_ CLOUDKIT
DATABASES
!
•CKDataBase es la clase que implementa CK para
acceder a la base de datos pública o privada del
contenedor
•No podemos crear objetos CKDataBase, para acceder
usaremos el objeto CKContainer
•Esta clase nos ofrece los mecanismos para interactuar
con los datos, realizar querys, guardar registros, etc..
DATABASES
!
•¿ Cómo accedemos a las bases de datos?
•CKDataBase pubDb = [[CKContainer
defaultContainer] publicCloudDataBase];
•CKDataBase privaDb = [[CKContainer
defaultContainer]privateCloudDatabase];
DATABASES PÚBLICA PRIVADA
TIPOS DE
DATOS
COMPARTIDOS USUARIO ACTIVO
CUENTA
NECESARIA SOLO
PARA ESCRITURA
CUENTA DE
USUARIO
OBLIGATORIA
PERMISOSOS
POR DEFECTO
TODO EL MUNDO
LECTURA
SOLO LECTURA EL
USUARIO
CUOTA DEVELOPER USUARIO
PERMISOS DE
EDICIÓN
BASADOS EN
ROLES (IDR)
N/A
RECORDS
#NSCODERMAD_ CLOUDKIT
RECORDS
•La clase de CK para manejar registros es CKRecord
•Un registro es un diccionario de keys-values
•Cada registro tiene un tipo, esto sirve para diferenciar
del resto de tipos usados. Es una cadena que
identifica la clase de información que manejará
•Cada key-value representan un campo de un registro y
su valor. Los tipos de datos que admite CK están
clasificados como simples o complejos
RECORDS
•Simples:
•strings, numbers, dates
•Complejos
•localizaciones
•referencias a otros registros
•ficheros
•Y arrays de todos estos
RECORDS
•Responsabilidades… porque nada es automático
•Nuestra App debe encargarse de recoger los registros
que necesite de manera explicita
•Para hacer un Fetch debemos conocer el ID del
Record que necesitamos
•Y si no sabemos el ID??? pues no hay problema,
usaremos queries
RECORDS
•Responsabilidades…
•Debemos trazar una estrategia de diseño de como
usaremos nuestros registros, como accederemos, etc.
•Tipos de relaciones, jugando con las relaciones
podemos tener borrado en cascada, cosa que no es
sencilla cuando estamos fuera de un modelo
relacional
•Mejor que queries usar suscripciones
RECORDS
•Esto no es solo para los registros, pero ya que
estamos lo contamos… Tenemos dos maneras de usar
este framework:
•A través de operation objects (basados en
NSOperation)
•Métodos de conveniencia
RECORDS
•CKContainer y CKDataBase tienen las dos
posibilidades, no tenemos obligación a la hora de
elegir de elegir uno u otro ….pero si lo haces con
NSOperation mejor
•Jugando con Operations podemos operar con
multiples registros a la vez, y podemos definir
dependencias para asegurar p.e. que los registros
sean salvados en el orden correcto
RECORDS
•CKContainer y CKDataBase tienen las dos
posibilidades, no tenemos obligación a la hora de
elegir de elegir uno u otro ….pero si lo haces con
NSOperation mejor
•Jugando con Operations podemos operar con
multiples registros a la vez, y podemos definir
dependencias para asegurar p.e. que los registros
sean salvados en el orden correcto
RECORDS
•Para usar un CKRecord usaremos:
•initWithRecordType
•initWithRecordType:zoneID
•itWithRecordType:recordID
RECORDS
•Para acceder a sus atributos:
•CKRecord *miRecord = [CKRecord ……
•[miRecord setObject:@“eldato” forKey:@“lakey”];
•miRecord[@“lakey”] = @“eldato”;
RECORDS
•Para almacenar un registro usaremos el método
saveRecord:completionHandler de un objeto
CKDataBase
RECORDS
•RecordZone
•una Zona nos permite agrupar un conjunto de datos
relacionado, por defecto tenemos 2 zonas (publica/privada)
•En la bbdd privada podemos crear nuestras propias zonas
•Muy útiles para realizar una escritura multiple de varios
registros (simulando una transacción)
•Podemos usar relaciones dentro de una zona…pero no
entre zonas
RECORDS
•RecordID: este objeto sirve para crear identificadores
únicos para los registros
•conociendo el ID podemos hacer un fetch para
obtener el objeto
•Muy importante combinado con suscripciones
RECORDS
•CKQuery & NSPredicate
•La alternativa a los fetchXX pero pagando peajes
•El rendimiento es más pesado
•CloudKit soporta un subconjunto de NSPredicate
RECORDS
RECORDS
•¿Cómo creamos una query?
•Creamos un predicado
•Creamos un objeto CKQuery:
•CKQuery *q = [CKQuery
alloc]initWithRecordType:predicate];
RECORDS
•y por último ejecutamos la query :
•[pubDataBase
performQuery:inZoneWithID:completionHandler:
^{NSArray *results, NSError *error){ …}];
RECORDS
•Assets o como podemos almacenar otros datos en un
CKRecord.
•CKAsset nos permite almacenar BLOBs
•ficheros….
•Como está asociado a un registro, este será su
propietario
•El sistema de subida y bajada está bastante optimizado
RECORDS
•Mientras que un registro tiene un limite de 1MB
máximo, los Asset no tienen limite y no computan
dentro del tamaño máximo del registro
RECORDS
•CloudKit no es un sistema relacional pero tiene una
clase que simula muy bien este aspecto:
CKReference
RECORDS
•Suscripciones: la idea es que nuestros registros
tengan suscripciones y solo cuando se produzcan
cambios en los datos pidamos a iCloud que nos los
entregue…….¿cómo?
•Notificaciones Push
•a través de la notificación recibiremos el ID del
registro que ha cambiado y obtenerlo será tan
simple como hacer un fetch
RECORDS
•CKSubscrition es el encargado de crear
suscripciones
•Asignaremos un tipo de registro y un predicado
para crear la condición
•Añadiremos un CKNotificationInfo a la suscripción
•En ultimo lugar guardaremos en la bbdd la
suscripción
RECORDS
•Ahora solo debemos incluir código para recibir
suscripciones y….
DEMO RECORDS
DASHBOARD
#NSCODERMAD_ CLOUDKIT
DEMO CONSOLA
LIMITACIONES
#NSCODERMAD_ CLOUDKIT
LIMITACIONES
#NSCODERMAD_ CLOUDKIT
LIMITACIONES
•Cuentas iCloud si o si
•No hay posibilidades de usar otros proveedores
•Solo iOS y OS X, no podemos pensar en otras
plataformas
•No hay código de servidor