SlideShare una empresa de Scribd logo
1 de 94
Descargar para leer sin conexión
iOS Notifications
Teoría, programación, registro, envío, recepción, manejo,
etc...
Antes de empezar...
• Nombre
• ¿A qué te dedicas?
• ¿Por qué MIMO?
• ¿Qué experiencia tienes como programador?
• ¿Y de apps móviles?
• ¿Qué sabes de las notificaciones de iOS?
Metodología
Metodología
Sobre las dudas...
Índice de contenidos
• Introducción
• Notificaciones locales
• Notificaciones remotas
• Proveedor de notificaciones
• Un caso práctico
Introducción
Conociendo las notificaciones
¿Qué es una notificación?
• Comunicación oficial y con las
formalidades preceptivas de
una resolución.
• Noticia veraz de algo.
RAE, 2005
¿Qué es una notificación?
¿Qué es una notificación?
Mecanismo que tienen las
aplicaciones móviles que no
se están ejecutando en primer
plano para indicar al usuario
que tiene alguna información
para él.
¿Cómo se muestran?
¿Y luego?
¡Empezamos!
Notificaciones
Notificaciones locales y remotas en profundidad
Propósito
Permitir a una aplicación informar
al usuario que tiene algo para él.
Casos prácticos
Notificaciones locales
• Almacenadas y entregadas por el propio
sistema operativo.
• Útiles para aplicaciones tipo calendarios,
recordatorios, temporizadores, etc...
• Límite de 64 notificaciones programadas
por aplicación.
Notificaciones Locales
App iOS
App iOS
Programación
Entrega
Notificaciones remotas
• Conocidas como notificaciones Push.
• Almacenadas por un servidor propio.
• Enviadas por internet (Wi-Fi, 3G, ...).
• Entregadas por APNs al dispositivo.
• Útil para aplicaciones y/o juegos con
interacción entre usuarios.
Push vs. Pull design
Client Server
...
Client Server
Pull
Push
Notificaciones Push
App
iOS
Server
APNs
Notificaciones Locales
Programación, recepción y manejo
Calentamiento
• Crear una nueva aplicación iOS.
• Cuando arranque debe mostrar una
pantalla con un sólo botón.
• Cada vez que se pulse el botón, se debe
mostrar un mensaje por consola.
• La aplicación debe funcionar en el
dispositivo real, no solo en el simulador.
Programación
Recepción
Manejo
Con la aplicación abierta (foreground o background)
Manejo
Con la aplicación cerrada...
Finalizando...
• Completar la aplicación para que cuando se
reciba una notificación se vaya directamente a
una pantalla que muestre los detalles de esa
notificación.
• La gestión de pantallas debe realizarse
mediante un UINavigationController.
• Debe funcionar tanto si la aplicación esta en
background, foreground o cerrada.
... y esto?
Badge
Asignación
Manejo
¡¡Asigna directamente el valor al badge!!
Badge
• Finalizar la aplicación de ejemplo añadiendo
funcionalidad para poner a cero el badge
cuando la notificación sea ‘leída’.
Puesta en común
• ¿Cómo diseñaríais una aplicación de
recordatorios basados en fechas?
• El badge debe indicar exactamente el número de
tareas pendientes
Conclusiones
• No se puede controlar el badge 100%,
habrá que actualizarlo desde la app siempre
que sea posible.
• La funcionalidad de nuestra aplicación no
puede depender de la notificación, ya que
ésta puede no recibirse o ser ignorada.
Notificaciones Push
Registro, envío, recepción y manejo
Notificaciones Push
App
iOS
Server
APNs
APNs
• Siglas de Apple Push Notificacion service.
• ‘Piedra Angular’ del sistema de
Notificaciones Apple.
• Recibe y distribuye las notificaciones a sus
destinatarios.
• Esa distribución es un servicio PUSH.
¿Servicio Push?
• ¿Qué es?
• ¿Cómo se consigue?
• ¿Qué ocurrirá con la
notificación si el
teléfono está apagado?
• ¿Y si no tiene internet?
APNs: Seguridad
Mecanismo 1: Seguridad basada en certificados digitales para todas las
comunicaciones.
Aseguramiento de la conexión dispositivo - APNs Aseguramiento de la conexión server - APNs
APNs: Seguridad
Mecanismo 2: Seguridad basada en un token único que identifica a cada
dispositivo.
Generación y distribución del token Notificación
APNs: Seguridad
• Servidor
• Certificado proporcionado por Apple.
• Token de los dispositivos.
• Aplicación Cliente
• Certificado proporciondo por Apple
(code sign).
• Haber enviado su token al servidor.
DEMO
Generación de certificados, configuración del app, ...
APNs: Otros servicios
• Servicio de información (feedback) que
indica los dispositivos que rechazaron
notificaciones.
• Política de almacenamiento y reenvío (store
and forward), si el destinatario no se
encuentra conectado.
Calentamiento
• Crear una nueva aplicación iOS que tenga
un sólo botón en pantalla.
• Cuando arranque debe mostrar una vista
oscurecida, tapando el botón y un
UIActivityIndicator en el medio girando
constantemente y un mensaje de espera.
• La aplicación debe funcionar en el
dispositivo real, no solo en el simulador.
Registro APNs
• Cuando se complete el registro, la vista de carga debe
desaparecer.
• El botón debe habilitarse/deshabilitarse dependiendo de si
el registro fue correcto o no.
Solicitando notificaciones
• El botón de la pantalla servirá para solicitar notificaciones
a un provider.
• API del provider:
• POST http://mimo-apns.herokuapp.com/users/greet
• Body(JSON): {“name”:“<nombre>”,“token”:”<token>”}
• El token debe contener sólo números y letras, no
espacios en blanco ni otros caracteres.
• Pista: Para asegurarnos de que el provider interpreta el
body como JSON se debe especificar la cabecera “Content-
Type” con “application/json”
Solicitando notificaciones
Proveedor de
notificaciones
Construcción de un servicio proveedor de
notificaciones en Play! Framework
Provider
• Crear un nuevo proyecto en Play!
Framework.
• Debe recibir un POST en la url /users/
greet. En el body recibirá un JSON:
• {“name”:”El name”,“token”:”El token”}
• Cuando se reciba la petición, se imprimirán
por consola los dos valores recibidos
(name y token)
Provider
/conf/routes
/app/controllers/User.java /app/models/User.java
Requisitos
• Componer el payload de la notificación
• Comunicación con API APNs
• Comunicación segura (TLS)
• Envío de datos en binario
• Recepción de la respuesta en binario
• Enviar notificaciones ‘en grupos’
• Obtener feedback periódicamente
Provider
• Construir el JSON que se enviará como ‘payload’ a APNs
{
"aps": {
"alert": "Welcome<name>",
"sound": "default",
"badge": 1
}
}
• Pista: Utilizar las clases JsonObject y/o JsonElement para
construir el JSON. No lo hagáis a mano.
• Imprimir el JSON por consola. (toString())
Provider
Requisitos
• Componer el payload de la notificación
• Comunicación con API APNs
• Comunicación segura (TLS)
• Envío de datos en binario
• Recepción de la respuesta en binario
• Enviar notificaciones ‘en grupos’
• Obtener feedback periódicamente
SSL/TLS
• Framework para establecer conexiones
seguras entre dos partes que quieren
comunicarse.
• La comunicación se inicia con una fase de
handshake:
• Deciden algoritmo, longitud de clave,
intercambian certificados y, usando encriptación
asimétrica, comparten la clave simétrica final.
Claves y certificados
• Claves de cifrado asimétrico
• Generadas en pares (pública-privada)
• Contenido cifrado con una sólo puede ser descifrado
por la otra
• Contenido firmado con una sólo puede ser verificado
por la otra
• Certificados
• Clave pública + información identificativa + fecha de
expiración
Confianza
• ¿Cómo saber si el certificado que nos están
presentando es veraz?
• 1º:¿El certificado es válido?(no ha expirado)
• 2º: ¿El certificado corresponde al host que
lo presenta?
• 3º: ¿Confiamos en la CA que lo generó?
SSL/TLS
Unidireccional Bidireccional
SSL en JAVA
Requisitos
• Componer el payload de la notificación
• Comunicación con API APNs
• Comunicación segura (TLS)
• Envío de datos en binario
• Recepción de la respuesta en binario
• Enviar notificaciones ‘en grupos’
• Obtener feedback periódicamente
API APNs
• byte 1
• Identificador único de la notificación
• UNIX Timestamp de expiración (en segundos)
• Longitud del token
• Token del dispositivo en binario
• Longitud del payload
• Payload (máximo 256 bytes y no acabar en null)
Antes de empezar...
• ¿Cuántos bits componen un byte?
• a) 4
• b) 8
• c) 16
• d) Todas son correctas :)
Antes de empezar...
• ¿Cómo se representa una serie de bits en
código fuente?
• a) 0x101010101
• b) 0xFFFF
• c) 1010101
• d) 0b1010101
Antes de empezar...
• ¿Cómo se extraen, por programación, los
bytes de un número?
Máscaras
• Se aplican con la operación AND (&).
• Sólo dejan ‘pasar’ cierta información.
• Sirve para detectar qué bits están ‘levantados’
1001001
0011000
0001000
&
Máscara
Desplazamiento de bits
• Simplemente desplaza bits
• (número) << posiciones
• 0b1 << 1 = 2 (0b10)
• 0b101<< 2 = 20 (0b10100)
• (número) >> posiciones
• 0b1 >> 0 = 0
• 0b101 >> 2 = 1 (0b1)
Trabajando con bits
• Crear un nuevo proyecto iOS llamado
BitsHandler.
• Construir la interfaz necesaria para que el
usuario introduzca un número y se le
muestre su representación binaria.
• Pista:Aplicar una máscara con un sólo bit a 1, sucesivamente
para ir obteniendo si el número introducido tiene o no el bit
correspondiente ‘levantado’.
Trabajando con bits
Trabajando con bytes
• Un byte son 8 bits
• Un número hexadecimal son 4 bits
• Un un byte son 2 números hexadecimales
• (byte)8 = 0b00001000 = 0x08
• (byte)255 = 0b11111111 = 0xFF
Trabajando con bytes
• Añadir al proyecto BitsHandler la capacidad
para mostrar también los bytes por que
está compuesto el número introducido.
• Pista: Recordad que un ‘int’ contiene 32 bits y un
byte 8.
Trabajando con bytes
¿Usable?
¿Cómodo?
Números hexadecimales
• Facilitan el manejo a nivel de bits.
• Toman valores desde 0 a 15
• Ocupan 4 bits
• 0b00000000111111110000000011111111 =
0x00FF00FF
• ¡¡Mucho más manejable!!
Números hexadecimales
• Reescribir la función anterior utilizando
notación hexadecimal en lugar de notación
binaria para la extracción de los bytes.
Números hexadecimales
• Reescribir la función anterior utilizando
notación hexadecimal en lugar de notación
binaria para la extracción de los bytes.
Números hexadecimales
• El deviceToken se recibe en el AppDelegate
como un array de bytes de números
hexadecimales.
• Escribir el código de la función description
del objeto NSData.
• Pista: Para representar un byte como dos
números hexadecimales usad formateo: %02X
Números hexadecimales
Provider
• Construir el array de bytes que se transmitirá
a APNs.
• Pista: Poner en práctica todo lo aprendido.
• Pista: Utilizar un ByteArrayOutputStream para
escribir bytes a un array
• Pista: Comprobar el resultado con ByteArrayChecker.
Envío
• Enviar los datos binarios a través del
OutputStream del Socket.
• Recibir la notificación!
Envío
• Enviar los datos binarios a través del
OutputStream del Socket.
• Recibir la notificación!
Requisitos
• Componer el payload de la notificación
• Comunicación con API APNs
• Comunicación segura (TLS)
• Envío de datos en binario
• Recepción de la respuesta en binario
• Enviar notificaciones ‘en grupos’
• Obtener feedback periódicamente
Respuesta
• ¡¡APNs SÓLO responde en caso de error!!
• Componentes:
• byte 8
• byte que indica el status
• Identificador único que se envió junto con la notificación.
Códigos de error
Provider
• Recibir y parsear la respuesta, si la hay.
• Consejo: Siempre utilizar BufferedInputStream para leer
datos de red.
• Pista:APNs no devolverá nada en caso de haber aceptado
la notificación. Utilizar el timeout del socket
sslSock.setSoTimeout.
Provider
Requisitos
• Componer el payload de la notificación
• Comunicación con API APNs
• Comunicación segura (TLS)
• Envío de datos en binario
• Recepción de la respuesta en binario
• Enviar notificaciones ‘en grupos’
• Obtener feedback periódicamente
Puesta en común
¿Qué problemas presenta este provider?
Puesta en común
¿Qué problemas presenta este provider?
¿Cómo solucionarlos?
Mejorando el provider
• Utilizar Asynchronous Jobs de Play! para procesar el
envío de las notificaciones.
• http://www.playframework.com/documentation/1.2/jobs
• Opción 1: Procesar el envío de notificaciones en
Jobs ‘inmediatos’.
• Opción 2:Almacenar las notificaciones pendientes y
enviarlas en grupos utilizando un Job periódico.
• Tener en cuenta que si APNs rechaza una notificación,
inmediatamente responde y cierra la conexión, por tanto, las
siguientes notificaciones deben reenviarse.
• Componer el payload de la notificación
• Comunicación con API APNs
• Comunicación segura (TLS)
• Envío de datos en binario
• Recepción de la respuesta en binario
• Enviar notificaciones ‘en grupos’
• Obtener feedback periódicamente
Requisitos
Feedback
• Informa de notificaciones rechazadas por
los dispositivos.
• Interfaz binario:
• Recomendable consultarlo una vez al día.
• Componer el payload de la notificación
• Comunicación con API APNs
• Comunicación segura (TLS)
• Envío de datos en binario
• Recepción de la respuesta en binario
• Enviar notificaciones ‘en grupos’
• Obtener feedback periódicamente
Requisitos
Caso Práctico
Caso Práctico
User
Device
iOS Android
Notification
iOS Android
Carlos Alonso Pérez
Developer
Twitter: @calonso
LinkedIn: mrcalonso
Mail: info@mrcalonso.com
¡Gracias!

Más contenido relacionado

Destacado

Montaje automatización 4
Montaje automatización 4Montaje automatización 4
Montaje automatización 4Maria Mora
 
Contagem silábica pulga na balança
Contagem silábica pulga na balançaContagem silábica pulga na balança
Contagem silábica pulga na balançaSuzy Santana
 
2011 requer envio de expediente ao exmo sr prefeito municipal solicitando o...
2011   requer envio de expediente ao exmo sr prefeito municipal solicitando o...2011   requer envio de expediente ao exmo sr prefeito municipal solicitando o...
2011 requer envio de expediente ao exmo sr prefeito municipal solicitando o...drtaylorjr
 
Presentació Pecha Kucha
Presentació Pecha KuchaPresentació Pecha Kucha
Presentació Pecha KuchaGerRaditoS
 
Compre circuitos integrado online em utsource
Compre circuitos integrado online em  utsource  Compre circuitos integrado online em  utsource
Compre circuitos integrado online em utsource 779061702
 

Destacado (11)

Parceria!
Parceria!Parceria!
Parceria!
 
Montaje automatización 4
Montaje automatización 4Montaje automatización 4
Montaje automatización 4
 
Contagem silábica pulga na balança
Contagem silábica pulga na balançaContagem silábica pulga na balança
Contagem silábica pulga na balança
 
2011 requer envio de expediente ao exmo sr prefeito municipal solicitando o...
2011   requer envio de expediente ao exmo sr prefeito municipal solicitando o...2011   requer envio de expediente ao exmo sr prefeito municipal solicitando o...
2011 requer envio de expediente ao exmo sr prefeito municipal solicitando o...
 
UN DIA DE LLUVIA
UN DIA DE LLUVIAUN DIA DE LLUVIA
UN DIA DE LLUVIA
 
Presentació Pecha Kucha
Presentació Pecha KuchaPresentació Pecha Kucha
Presentació Pecha Kucha
 
Santiago de cali
Santiago de caliSantiago de cali
Santiago de cali
 
Ficha 1
Ficha 1Ficha 1
Ficha 1
 
Compre circuitos integrado online em utsource
Compre circuitos integrado online em  utsource  Compre circuitos integrado online em  utsource
Compre circuitos integrado online em utsource
 
Libreta de notas_2014
Libreta de notas_2014Libreta de notas_2014
Libreta de notas_2014
 
01
0101
01
 

Similar a iOS Notifications

Kinect,Sensores 3D, NUI (Natural User Interfaces) y Open Source con OpenNI
Kinect,Sensores 3D, NUI (Natural User Interfaces) y Open Source con OpenNIKinect,Sensores 3D, NUI (Natural User Interfaces) y Open Source con OpenNI
Kinect,Sensores 3D, NUI (Natural User Interfaces) y Open Source con OpenNICarlos Toxtli
 
Taller Realidad Aumentada pamplona 29 mayo 2015
Taller Realidad Aumentada pamplona 29 mayo 2015Taller Realidad Aumentada pamplona 29 mayo 2015
Taller Realidad Aumentada pamplona 29 mayo 2015Manuel Alonso Rosa
 
Osmius
OsmiusOsmius
OsmiusTensor
 
Jornada 10 años ASP NET en Español - Implementación de Notificaciones Push...
Jornada 10 años ASP NET en Español - Implementación de Notificaciones Push...Jornada 10 años ASP NET en Español - Implementación de Notificaciones Push...
Jornada 10 años ASP NET en Español - Implementación de Notificaciones Push...Luis Beltran
 
Charla LogicApps en el CEUS
Charla LogicApps en el CEUSCharla LogicApps en el CEUS
Charla LogicApps en el CEUSrobertogg
 
Osmius, Herramientas SNMP
Osmius, Herramientas SNMPOsmius, Herramientas SNMP
Osmius, Herramientas SNMPkinito2h
 
Globant Wearables & Internet of Things - Presentación Mar del Plata Agosto 2014
Globant Wearables & Internet of Things - Presentación Mar del Plata Agosto 2014Globant Wearables & Internet of Things - Presentación Mar del Plata Agosto 2014
Globant Wearables & Internet of Things - Presentación Mar del Plata Agosto 2014Pablo Vittori
 
LenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptxLenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptxcarrilloja98
 
Manual edu bot
Manual edu botManual edu bot
Manual edu botABACO
 

Similar a iOS Notifications (20)

iOS Notifications
iOS NotificationsiOS Notifications
iOS Notifications
 
Kinect,Sensores 3D, NUI (Natural User Interfaces) y Open Source con OpenNI
Kinect,Sensores 3D, NUI (Natural User Interfaces) y Open Source con OpenNIKinect,Sensores 3D, NUI (Natural User Interfaces) y Open Source con OpenNI
Kinect,Sensores 3D, NUI (Natural User Interfaces) y Open Source con OpenNI
 
Push notifications
Push notificationsPush notifications
Push notifications
 
Introducción a los "Pelochos"
Introducción a los "Pelochos"Introducción a los "Pelochos"
Introducción a los "Pelochos"
 
Workshop MDP Campus Party Mx
Workshop MDP Campus Party MxWorkshop MDP Campus Party Mx
Workshop MDP Campus Party Mx
 
Taller Realidad Aumentada pamplona 29 mayo 2015
Taller Realidad Aumentada pamplona 29 mayo 2015Taller Realidad Aumentada pamplona 29 mayo 2015
Taller Realidad Aumentada pamplona 29 mayo 2015
 
Osmius
OsmiusOsmius
Osmius
 
Jornada 10 años ASP NET en Español - Implementación de Notificaciones Push...
Jornada 10 años ASP NET en Español - Implementación de Notificaciones Push...Jornada 10 años ASP NET en Español - Implementación de Notificaciones Push...
Jornada 10 años ASP NET en Español - Implementación de Notificaciones Push...
 
Azure Notification Hub y Xamarin
Azure Notification Hub y XamarinAzure Notification Hub y Xamarin
Azure Notification Hub y Xamarin
 
Sesion dos azuay
Sesion dos azuaySesion dos azuay
Sesion dos azuay
 
CFEmergencia
CFEmergenciaCFEmergencia
CFEmergencia
 
Casos exito santiago toribio almatech
Casos exito santiago toribio almatechCasos exito santiago toribio almatech
Casos exito santiago toribio almatech
 
Charla LogicApps en el CEUS
Charla LogicApps en el CEUSCharla LogicApps en el CEUS
Charla LogicApps en el CEUS
 
Presentación DNIe
Presentación DNIePresentación DNIe
Presentación DNIe
 
Osmius, Herramientas SNMP
Osmius, Herramientas SNMPOsmius, Herramientas SNMP
Osmius, Herramientas SNMP
 
Globant Wearables & Internet of Things - Presentación Mar del Plata Agosto 2014
Globant Wearables & Internet of Things - Presentación Mar del Plata Agosto 2014Globant Wearables & Internet of Things - Presentación Mar del Plata Agosto 2014
Globant Wearables & Internet of Things - Presentación Mar del Plata Agosto 2014
 
Blackberry
BlackberryBlackberry
Blackberry
 
Pdi Smart
Pdi SmartPdi Smart
Pdi Smart
 
LenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptxLenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptx
 
Manual edu bot
Manual edu botManual edu bot
Manual edu bot
 

Más de Carlos Alonso Pérez

Ruby closures, how are they possible?
Ruby closures, how are they possible?Ruby closures, how are they possible?
Ruby closures, how are they possible?Carlos Alonso Pérez
 
Scalable data modelling by example - Cassandra Summit '16
Scalable data modelling by example - Cassandra Summit '16Scalable data modelling by example - Cassandra Summit '16
Scalable data modelling by example - Cassandra Summit '16Carlos Alonso Pérez
 
Sensors (Accelerometer, Magnetometer, Gyroscope, Proximity and Luminosity)
Sensors (Accelerometer, Magnetometer, Gyroscope, Proximity and Luminosity)Sensors (Accelerometer, Magnetometer, Gyroscope, Proximity and Luminosity)
Sensors (Accelerometer, Magnetometer, Gyroscope, Proximity and Luminosity)Carlos Alonso Pérez
 
Construyendo y publicando nuestra primera app multi plataforma (II)
Construyendo y publicando nuestra primera app multi plataforma (II)Construyendo y publicando nuestra primera app multi plataforma (II)
Construyendo y publicando nuestra primera app multi plataforma (II)Carlos Alonso Pérez
 
Construyendo y publicando nuestra primera app multiplataforma
Construyendo y publicando nuestra primera app multiplataformaConstruyendo y publicando nuestra primera app multiplataforma
Construyendo y publicando nuestra primera app multiplataformaCarlos Alonso Pérez
 
Cassandra Workshop - Cassandra from scratch in one day
Cassandra Workshop - Cassandra from scratch in one dayCassandra Workshop - Cassandra from scratch in one day
Cassandra Workshop - Cassandra from scratch in one dayCarlos Alonso Pérez
 
Case Study: Troubleshooting Cassandra performance issues as a developer
Case Study: Troubleshooting Cassandra performance issues as a developerCase Study: Troubleshooting Cassandra performance issues as a developer
Case Study: Troubleshooting Cassandra performance issues as a developerCarlos Alonso Pérez
 

Más de Carlos Alonso Pérez (18)

Ruby closures, how are they possible?
Ruby closures, how are they possible?Ruby closures, how are they possible?
Ruby closures, how are they possible?
 
Scalable data modelling by example - Cassandra Summit '16
Scalable data modelling by example - Cassandra Summit '16Scalable data modelling by example - Cassandra Summit '16
Scalable data modelling by example - Cassandra Summit '16
 
Cassandra for impatients
Cassandra for impatientsCassandra for impatients
Cassandra for impatients
 
Enumerados Server
Enumerados ServerEnumerados Server
Enumerados Server
 
iCloud
iCloudiCloud
iCloud
 
Sensors (Accelerometer, Magnetometer, Gyroscope, Proximity and Luminosity)
Sensors (Accelerometer, Magnetometer, Gyroscope, Proximity and Luminosity)Sensors (Accelerometer, Magnetometer, Gyroscope, Proximity and Luminosity)
Sensors (Accelerometer, Magnetometer, Gyroscope, Proximity and Luminosity)
 
CoreLocation & MapKit
CoreLocation & MapKitCoreLocation & MapKit
CoreLocation & MapKit
 
CoreData
CoreDataCoreData
CoreData
 
Aplicaciones móviles - HTML5
Aplicaciones móviles - HTML5Aplicaciones móviles - HTML5
Aplicaciones móviles - HTML5
 
Programacion web
Programacion webProgramacion web
Programacion web
 
Javascript - 2014
Javascript - 2014Javascript - 2014
Javascript - 2014
 
Html5
Html5Html5
Html5
 
Javascript
JavascriptJavascript
Javascript
 
Construyendo y publicando nuestra primera app multi plataforma (II)
Construyendo y publicando nuestra primera app multi plataforma (II)Construyendo y publicando nuestra primera app multi plataforma (II)
Construyendo y publicando nuestra primera app multi plataforma (II)
 
Construyendo y publicando nuestra primera app multiplataforma
Construyendo y publicando nuestra primera app multiplataformaConstruyendo y publicando nuestra primera app multiplataforma
Construyendo y publicando nuestra primera app multiplataforma
 
Cassandra Workshop - Cassandra from scratch in one day
Cassandra Workshop - Cassandra from scratch in one dayCassandra Workshop - Cassandra from scratch in one day
Cassandra Workshop - Cassandra from scratch in one day
 
Case Study: Troubleshooting Cassandra performance issues as a developer
Case Study: Troubleshooting Cassandra performance issues as a developerCase Study: Troubleshooting Cassandra performance issues as a developer
Case Study: Troubleshooting Cassandra performance issues as a developer
 
Swift and the BigData
Swift and the BigDataSwift and the BigData
Swift and the BigData
 

Último

PostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDPostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDEdith Puclla
 
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.pptoscarvielma45
 
DISEÑO PAVIMENTOS CLASE 06 PAVIMENTOS.pdf
DISEÑO PAVIMENTOS CLASE 06 PAVIMENTOS.pdfDISEÑO PAVIMENTOS CLASE 06 PAVIMENTOS.pdf
DISEÑO PAVIMENTOS CLASE 06 PAVIMENTOS.pdfDaysonMillerAvilesAc1
 
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...GuillermoRodriguez239462
 
Presentación Instrumentos de Medicion Electricos.pptx
Presentación Instrumentos de Medicion Electricos.pptxPresentación Instrumentos de Medicion Electricos.pptx
Presentación Instrumentos de Medicion Electricos.pptxwilliam801689
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Dr. Edwin Hernandez
 
Minería convencional: datos importantes y conceptos
Minería convencional: datos importantes y conceptosMinería convencional: datos importantes y conceptos
Minería convencional: datos importantes y conceptosisauVillalva
 
Determinación de espacios en la instalación
Determinación de espacios en la instalaciónDeterminación de espacios en la instalación
Determinación de espacios en la instalaciónQualityAdviceService
 
Quimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfQuimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfs7yl3dr4g0n01
 
Sistemas de Ecuaciones no lineales-1.pptx
Sistemas de Ecuaciones no lineales-1.pptxSistemas de Ecuaciones no lineales-1.pptx
Sistemas de Ecuaciones no lineales-1.pptx170766
 
Sistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión internaSistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión internamengual57
 
TIPOS DE SOPORTES - CLASIFICACION IG.pdf
TIPOS DE SOPORTES - CLASIFICACION IG.pdfTIPOS DE SOPORTES - CLASIFICACION IG.pdf
TIPOS DE SOPORTES - CLASIFICACION IG.pdfssuser202b79
 
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTAPORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTElisaLen4
 
Lineamientos del Plan Oferta y Demanda sesión 5
Lineamientos del Plan Oferta y Demanda sesión 5Lineamientos del Plan Oferta y Demanda sesión 5
Lineamientos del Plan Oferta y Demanda sesión 5juanjoelaytegonzales2
 
Ficha Tecnica de Ladrillos de Tabique de diferentes modelos
Ficha Tecnica de Ladrillos de Tabique de diferentes modelosFicha Tecnica de Ladrillos de Tabique de diferentes modelos
Ficha Tecnica de Ladrillos de Tabique de diferentes modelosRamiroCruzSalazar
 
27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.pptjacnuevarisaralda22
 
Clasificación de Equipos e Instrumentos en Electricidad.docx
Clasificación de Equipos e Instrumentos en Electricidad.docxClasificación de Equipos e Instrumentos en Electricidad.docx
Clasificación de Equipos e Instrumentos en Electricidad.docxwilliam801689
 
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)Ricardo705519
 
Tabla de referentes empíricos para tesis-1.docx
Tabla de referentes empíricos para tesis-1.docxTabla de referentes empíricos para tesis-1.docx
Tabla de referentes empíricos para tesis-1.docxLuisJJacinto
 

Último (20)

PostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDPostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCD
 
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
 
DISEÑO PAVIMENTOS CLASE 06 PAVIMENTOS.pdf
DISEÑO PAVIMENTOS CLASE 06 PAVIMENTOS.pdfDISEÑO PAVIMENTOS CLASE 06 PAVIMENTOS.pdf
DISEÑO PAVIMENTOS CLASE 06 PAVIMENTOS.pdf
 
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
 
Presentación Instrumentos de Medicion Electricos.pptx
Presentación Instrumentos de Medicion Electricos.pptxPresentación Instrumentos de Medicion Electricos.pptx
Presentación Instrumentos de Medicion Electricos.pptx
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...
 
Minería convencional: datos importantes y conceptos
Minería convencional: datos importantes y conceptosMinería convencional: datos importantes y conceptos
Minería convencional: datos importantes y conceptos
 
Determinación de espacios en la instalación
Determinación de espacios en la instalaciónDeterminación de espacios en la instalación
Determinación de espacios en la instalación
 
Quimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfQuimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdf
 
Sistemas de Ecuaciones no lineales-1.pptx
Sistemas de Ecuaciones no lineales-1.pptxSistemas de Ecuaciones no lineales-1.pptx
Sistemas de Ecuaciones no lineales-1.pptx
 
Sistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión internaSistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión interna
 
TIPOS DE SOPORTES - CLASIFICACION IG.pdf
TIPOS DE SOPORTES - CLASIFICACION IG.pdfTIPOS DE SOPORTES - CLASIFICACION IG.pdf
TIPOS DE SOPORTES - CLASIFICACION IG.pdf
 
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTAPORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
 
Lineamientos del Plan Oferta y Demanda sesión 5
Lineamientos del Plan Oferta y Demanda sesión 5Lineamientos del Plan Oferta y Demanda sesión 5
Lineamientos del Plan Oferta y Demanda sesión 5
 
Ficha Tecnica de Ladrillos de Tabique de diferentes modelos
Ficha Tecnica de Ladrillos de Tabique de diferentes modelosFicha Tecnica de Ladrillos de Tabique de diferentes modelos
Ficha Tecnica de Ladrillos de Tabique de diferentes modelos
 
27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt
 
422382393-Curso-de-Tableros-Electricos.pptx
422382393-Curso-de-Tableros-Electricos.pptx422382393-Curso-de-Tableros-Electricos.pptx
422382393-Curso-de-Tableros-Electricos.pptx
 
Clasificación de Equipos e Instrumentos en Electricidad.docx
Clasificación de Equipos e Instrumentos en Electricidad.docxClasificación de Equipos e Instrumentos en Electricidad.docx
Clasificación de Equipos e Instrumentos en Electricidad.docx
 
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
 
Tabla de referentes empíricos para tesis-1.docx
Tabla de referentes empíricos para tesis-1.docxTabla de referentes empíricos para tesis-1.docx
Tabla de referentes empíricos para tesis-1.docx
 

iOS Notifications

  • 1. iOS Notifications Teoría, programación, registro, envío, recepción, manejo, etc...
  • 2. Antes de empezar... • Nombre • ¿A qué te dedicas? • ¿Por qué MIMO? • ¿Qué experiencia tienes como programador? • ¿Y de apps móviles? • ¿Qué sabes de las notificaciones de iOS?
  • 6. Índice de contenidos • Introducción • Notificaciones locales • Notificaciones remotas • Proveedor de notificaciones • Un caso práctico
  • 8. ¿Qué es una notificación?
  • 9. • Comunicación oficial y con las formalidades preceptivas de una resolución. • Noticia veraz de algo. RAE, 2005 ¿Qué es una notificación?
  • 10. ¿Qué es una notificación? Mecanismo que tienen las aplicaciones móviles que no se están ejecutando en primer plano para indicar al usuario que tiene alguna información para él.
  • 15. Propósito Permitir a una aplicación informar al usuario que tiene algo para él.
  • 17. Notificaciones locales • Almacenadas y entregadas por el propio sistema operativo. • Útiles para aplicaciones tipo calendarios, recordatorios, temporizadores, etc... • Límite de 64 notificaciones programadas por aplicación.
  • 18. Notificaciones Locales App iOS App iOS Programación Entrega
  • 19. Notificaciones remotas • Conocidas como notificaciones Push. • Almacenadas por un servidor propio. • Enviadas por internet (Wi-Fi, 3G, ...). • Entregadas por APNs al dispositivo. • Útil para aplicaciones y/o juegos con interacción entre usuarios.
  • 20. Push vs. Pull design Client Server ... Client Server Pull Push
  • 23. Calentamiento • Crear una nueva aplicación iOS. • Cuando arranque debe mostrar una pantalla con un sólo botón. • Cada vez que se pulse el botón, se debe mostrar un mensaje por consola. • La aplicación debe funcionar en el dispositivo real, no solo en el simulador.
  • 26. Manejo Con la aplicación abierta (foreground o background)
  • 28. Finalizando... • Completar la aplicación para que cuando se reciba una notificación se vaya directamente a una pantalla que muestre los detalles de esa notificación. • La gestión de pantallas debe realizarse mediante un UINavigationController. • Debe funcionar tanto si la aplicación esta en background, foreground o cerrada.
  • 31. Badge • Finalizar la aplicación de ejemplo añadiendo funcionalidad para poner a cero el badge cuando la notificación sea ‘leída’.
  • 32. Puesta en común • ¿Cómo diseñaríais una aplicación de recordatorios basados en fechas? • El badge debe indicar exactamente el número de tareas pendientes
  • 33. Conclusiones • No se puede controlar el badge 100%, habrá que actualizarlo desde la app siempre que sea posible. • La funcionalidad de nuestra aplicación no puede depender de la notificación, ya que ésta puede no recibirse o ser ignorada.
  • 36. APNs • Siglas de Apple Push Notificacion service. • ‘Piedra Angular’ del sistema de Notificaciones Apple. • Recibe y distribuye las notificaciones a sus destinatarios. • Esa distribución es un servicio PUSH.
  • 37. ¿Servicio Push? • ¿Qué es? • ¿Cómo se consigue? • ¿Qué ocurrirá con la notificación si el teléfono está apagado? • ¿Y si no tiene internet?
  • 38. APNs: Seguridad Mecanismo 1: Seguridad basada en certificados digitales para todas las comunicaciones. Aseguramiento de la conexión dispositivo - APNs Aseguramiento de la conexión server - APNs
  • 39. APNs: Seguridad Mecanismo 2: Seguridad basada en un token único que identifica a cada dispositivo. Generación y distribución del token Notificación
  • 40. APNs: Seguridad • Servidor • Certificado proporcionado por Apple. • Token de los dispositivos. • Aplicación Cliente • Certificado proporciondo por Apple (code sign). • Haber enviado su token al servidor.
  • 41. DEMO Generación de certificados, configuración del app, ...
  • 42. APNs: Otros servicios • Servicio de información (feedback) que indica los dispositivos que rechazaron notificaciones. • Política de almacenamiento y reenvío (store and forward), si el destinatario no se encuentra conectado.
  • 43. Calentamiento • Crear una nueva aplicación iOS que tenga un sólo botón en pantalla. • Cuando arranque debe mostrar una vista oscurecida, tapando el botón y un UIActivityIndicator en el medio girando constantemente y un mensaje de espera. • La aplicación debe funcionar en el dispositivo real, no solo en el simulador.
  • 44. Registro APNs • Cuando se complete el registro, la vista de carga debe desaparecer. • El botón debe habilitarse/deshabilitarse dependiendo de si el registro fue correcto o no.
  • 45. Solicitando notificaciones • El botón de la pantalla servirá para solicitar notificaciones a un provider. • API del provider: • POST http://mimo-apns.herokuapp.com/users/greet • Body(JSON): {“name”:“<nombre>”,“token”:”<token>”} • El token debe contener sólo números y letras, no espacios en blanco ni otros caracteres. • Pista: Para asegurarnos de que el provider interpreta el body como JSON se debe especificar la cabecera “Content- Type” con “application/json”
  • 47. Proveedor de notificaciones Construcción de un servicio proveedor de notificaciones en Play! Framework
  • 48. Provider • Crear un nuevo proyecto en Play! Framework. • Debe recibir un POST en la url /users/ greet. En el body recibirá un JSON: • {“name”:”El name”,“token”:”El token”} • Cuando se reciba la petición, se imprimirán por consola los dos valores recibidos (name y token)
  • 50. Requisitos • Componer el payload de la notificación • Comunicación con API APNs • Comunicación segura (TLS) • Envío de datos en binario • Recepción de la respuesta en binario • Enviar notificaciones ‘en grupos’ • Obtener feedback periódicamente
  • 51. Provider • Construir el JSON que se enviará como ‘payload’ a APNs { "aps": { "alert": "Welcome<name>", "sound": "default", "badge": 1 } } • Pista: Utilizar las clases JsonObject y/o JsonElement para construir el JSON. No lo hagáis a mano. • Imprimir el JSON por consola. (toString())
  • 53. Requisitos • Componer el payload de la notificación • Comunicación con API APNs • Comunicación segura (TLS) • Envío de datos en binario • Recepción de la respuesta en binario • Enviar notificaciones ‘en grupos’ • Obtener feedback periódicamente
  • 54. SSL/TLS • Framework para establecer conexiones seguras entre dos partes que quieren comunicarse. • La comunicación se inicia con una fase de handshake: • Deciden algoritmo, longitud de clave, intercambian certificados y, usando encriptación asimétrica, comparten la clave simétrica final.
  • 55. Claves y certificados • Claves de cifrado asimétrico • Generadas en pares (pública-privada) • Contenido cifrado con una sólo puede ser descifrado por la otra • Contenido firmado con una sólo puede ser verificado por la otra • Certificados • Clave pública + información identificativa + fecha de expiración
  • 56. Confianza • ¿Cómo saber si el certificado que nos están presentando es veraz? • 1º:¿El certificado es válido?(no ha expirado) • 2º: ¿El certificado corresponde al host que lo presenta? • 3º: ¿Confiamos en la CA que lo generó?
  • 59. Requisitos • Componer el payload de la notificación • Comunicación con API APNs • Comunicación segura (TLS) • Envío de datos en binario • Recepción de la respuesta en binario • Enviar notificaciones ‘en grupos’ • Obtener feedback periódicamente
  • 60. API APNs • byte 1 • Identificador único de la notificación • UNIX Timestamp de expiración (en segundos) • Longitud del token • Token del dispositivo en binario • Longitud del payload • Payload (máximo 256 bytes y no acabar en null)
  • 61. Antes de empezar... • ¿Cuántos bits componen un byte? • a) 4 • b) 8 • c) 16 • d) Todas son correctas :)
  • 62. Antes de empezar... • ¿Cómo se representa una serie de bits en código fuente? • a) 0x101010101 • b) 0xFFFF • c) 1010101 • d) 0b1010101
  • 63. Antes de empezar... • ¿Cómo se extraen, por programación, los bytes de un número?
  • 64. Máscaras • Se aplican con la operación AND (&). • Sólo dejan ‘pasar’ cierta información. • Sirve para detectar qué bits están ‘levantados’ 1001001 0011000 0001000 & Máscara
  • 65. Desplazamiento de bits • Simplemente desplaza bits • (número) << posiciones • 0b1 << 1 = 2 (0b10) • 0b101<< 2 = 20 (0b10100) • (número) >> posiciones • 0b1 >> 0 = 0 • 0b101 >> 2 = 1 (0b1)
  • 66. Trabajando con bits • Crear un nuevo proyecto iOS llamado BitsHandler. • Construir la interfaz necesaria para que el usuario introduzca un número y se le muestre su representación binaria. • Pista:Aplicar una máscara con un sólo bit a 1, sucesivamente para ir obteniendo si el número introducido tiene o no el bit correspondiente ‘levantado’.
  • 68. Trabajando con bytes • Un byte son 8 bits • Un número hexadecimal son 4 bits • Un un byte son 2 números hexadecimales • (byte)8 = 0b00001000 = 0x08 • (byte)255 = 0b11111111 = 0xFF
  • 69. Trabajando con bytes • Añadir al proyecto BitsHandler la capacidad para mostrar también los bytes por que está compuesto el número introducido. • Pista: Recordad que un ‘int’ contiene 32 bits y un byte 8.
  • 71. Números hexadecimales • Facilitan el manejo a nivel de bits. • Toman valores desde 0 a 15 • Ocupan 4 bits • 0b00000000111111110000000011111111 = 0x00FF00FF • ¡¡Mucho más manejable!!
  • 72. Números hexadecimales • Reescribir la función anterior utilizando notación hexadecimal en lugar de notación binaria para la extracción de los bytes.
  • 73. Números hexadecimales • Reescribir la función anterior utilizando notación hexadecimal en lugar de notación binaria para la extracción de los bytes.
  • 74. Números hexadecimales • El deviceToken se recibe en el AppDelegate como un array de bytes de números hexadecimales. • Escribir el código de la función description del objeto NSData. • Pista: Para representar un byte como dos números hexadecimales usad formateo: %02X
  • 76. Provider • Construir el array de bytes que se transmitirá a APNs. • Pista: Poner en práctica todo lo aprendido. • Pista: Utilizar un ByteArrayOutputStream para escribir bytes a un array • Pista: Comprobar el resultado con ByteArrayChecker.
  • 77.
  • 78. Envío • Enviar los datos binarios a través del OutputStream del Socket. • Recibir la notificación!
  • 79. Envío • Enviar los datos binarios a través del OutputStream del Socket. • Recibir la notificación!
  • 80. Requisitos • Componer el payload de la notificación • Comunicación con API APNs • Comunicación segura (TLS) • Envío de datos en binario • Recepción de la respuesta en binario • Enviar notificaciones ‘en grupos’ • Obtener feedback periódicamente
  • 81. Respuesta • ¡¡APNs SÓLO responde en caso de error!! • Componentes: • byte 8 • byte que indica el status • Identificador único que se envió junto con la notificación.
  • 83. Provider • Recibir y parsear la respuesta, si la hay. • Consejo: Siempre utilizar BufferedInputStream para leer datos de red. • Pista:APNs no devolverá nada en caso de haber aceptado la notificación. Utilizar el timeout del socket sslSock.setSoTimeout.
  • 85. Requisitos • Componer el payload de la notificación • Comunicación con API APNs • Comunicación segura (TLS) • Envío de datos en binario • Recepción de la respuesta en binario • Enviar notificaciones ‘en grupos’ • Obtener feedback periódicamente
  • 86. Puesta en común ¿Qué problemas presenta este provider?
  • 87. Puesta en común ¿Qué problemas presenta este provider? ¿Cómo solucionarlos?
  • 88. Mejorando el provider • Utilizar Asynchronous Jobs de Play! para procesar el envío de las notificaciones. • http://www.playframework.com/documentation/1.2/jobs • Opción 1: Procesar el envío de notificaciones en Jobs ‘inmediatos’. • Opción 2:Almacenar las notificaciones pendientes y enviarlas en grupos utilizando un Job periódico. • Tener en cuenta que si APNs rechaza una notificación, inmediatamente responde y cierra la conexión, por tanto, las siguientes notificaciones deben reenviarse.
  • 89. • Componer el payload de la notificación • Comunicación con API APNs • Comunicación segura (TLS) • Envío de datos en binario • Recepción de la respuesta en binario • Enviar notificaciones ‘en grupos’ • Obtener feedback periódicamente Requisitos
  • 90. Feedback • Informa de notificaciones rechazadas por los dispositivos. • Interfaz binario: • Recomendable consultarlo una vez al día.
  • 91. • Componer el payload de la notificación • Comunicación con API APNs • Comunicación segura (TLS) • Envío de datos en binario • Recepción de la respuesta en binario • Enviar notificaciones ‘en grupos’ • Obtener feedback periódicamente Requisitos
  • 94. Carlos Alonso Pérez Developer Twitter: @calonso LinkedIn: mrcalonso Mail: info@mrcalonso.com ¡Gracias!