1. ¿Qué es un iBeacon y
como funciona?
Pedro Muñoz Cabrera
pmunoz08@gmail.com
@pmunoz08
2. Qué es un beacon?
No es bacon, es beacon!!!
Su inicio data del 2007, cuando Nokia creó Wibree, punto de inicio de
BLE.
Funciona bajo el protocolo BLE (Bluetooth 4.0) junio 2010
Indoor positioning sytem o “System Advertising”.
Envía información contínuamente, no necesario ser enlazado
CB 4.0 emite en una frecuencia de 2.4GHz, divididos en 39 canales de
2.0 MHz. (36 primeros para intercambio de datos con dispositivos enlazados, los otros 3 son
los usados para “Advertising”)
Alcamce 50-70m dependiendo de posibles interferencias.
3. y un iBeacon?
Es el nombre comercial acuñado por Apple para los beacons.
“a new class of low-powered, low-cost transmitters that can notify nearby iOS
7 devices of their presence.” WWDC 2013
Soportado por :
iPhone 4S y posteriores
iPad3 y posteriores
iPod touch 5ª generación
Macs con Mavericks y Bluetooth 4.0
4. y un iBeacon?
!
Aunque Bluetooth 4.0 está soportado desde iOS 5.0 hasta iOS 7 no hemos contado
una api para trabjar con beacons incluyendo en el Framework Core Location:
Nuevos métodos en el protocolo CLLocationManagerDelegate
CLBeacon
CLBeaconRegion
Dentro Bluetooth LE hay dos grupos o conceptos:
Peripheral. Informan de servicios y expone sus características (properties).
Central. Buscar servicios y leen/escriben las propiedades del mismo.
Un iBeacon es un “Peripheral” que expone sus características pero no es un
servicio BLE
5. CLLocationManagerDelegate
Para poder interactuar con iBeacons en iOS7 se han añadido algunos métodos al
protocolo CLLocationMAnagerDelegate:
locationManager:didDetermineState:forRegion:
El CLLocationManager llama a este método cuando se pasa la frontera de una region.
CLREgionState: (CLRegionStateUnknown, CLRegionStateInside, CLRegionStateOutside)
locationManager:didRangeBeacons:inRegion:
El CLLocationMAnager llama a este método cuando detecta beacons o dejar de
detectarlos. Los iBeacosn detectados se reciben en un aray ordenados por proximidad.
El más cercano el primero.
locationManager:rangingBeaconsDidFailForRegion:withError:
Si una CLBeaconRegion contiene datos no válidos o falla al registrase.
requestStateForRegion:
Nos permite preguntar por estado del dispositivo en relación con una región.
6. CLBeacon
Hereda de NSObject y representa alos iBeacons encontrados en
una CLBeaconRegion.
Nos provee de las siguientes propiedades:
proximityUUID. Un ID global, por ejemplo para identificar una compañía.
major y minor. Permite crear áreas o secciones de beacons
proximity. Distancia relativa a un iBeacon (Inmediate, Near, Far, Unknown)
accuracy. Distancia en metros. No posición exacta
rssi. Fuerza de la señal recibida medida en Db
Crear un uuid en terminal
$ uuidgen
F33AA853-94A8-4912-8BCF-D2EF6C2EF36F
7. CLBeaconRegion
Hereda de CLRegion, define una región basada en la proximidad de un
dispositivo a un CLBeacon. Nos ofrece 3 inicializadores:
initWithProximityUUID:identifier:
initWithProximityUUID:major:identifier:
initWithProximityUUID:major:minor:identifier:
!
CLBeaconRegion *region = [[CLBeaconRegion alloc]
initWithProximityUUID:uuid
major:major
minor:minor
identifier:kBeaconIdentifier];
8. CLBeaconRegion
Propiedades:
notifyEntryStayOnDisplay. Si su valor es YES, envía
notificaciones de beacons, cuando el usuario enciende la pantalla del
dispositivo y está dentro de la región, incluso si la app no está
corriendo, en este caso la app se lanza en background. Ojo que la app
no esté corriendo se refiere a que esté inactiva porque la ha parado el
SO, si la apara el usuario, la app no recibirá notificaciones. Default NO
CLRegion:
notifyOnEntry. llamará a locationManager:didEnterRegion:
cunado se entre en una región .Default Yes
notifyOnExit. llamará a locationManager:didExitRegion:
cunado se salga en una región .Default Yes
11. CLBeaconRegion
Métodos:
peripheralDataWithMeasuredPower:
Devuelve un diccionario con la información que identifica al beacon codificada
además de la información a trnasmitir. Este diccionario se debe pasar a una
instancia de CBPeropheralMAnager al método startAdvertising. Este es uno de
los pasos a realizar para convertir nuestro dispositivo en un iBeacon. Lo veremos
despues en un ejemplo.
El parámetro measuredPower es opcional, representa la medida de la
fuerza de la señal a 1 metro de distancia del beacon.
12. Donde encuentro un iBeacon?
Posiblemente lleves un potencial iBeacon en el bolsillo :-).
Como hemos visto un iPhone puede funcionar como iBeacon,
lo veremos en una Demo.
13. Donde encuentro un iBeacon?
Posiblemente lleves un potencial iBeacon en el bolsillo :-). Como
hemos visto un iPhone puede funcionar como iBeacon, lo veremos en
una Demo.
_peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self
queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
!
!
CLBeaconRegion *region = [[CLBeaconRegion alloc]
initWithProximityUUID:uuid
major:major
minor:minor
identifier:kBeaconIdentifier];
NSDictionary *peripheralData = [region
peripheralDataWithMeasuredPower:nil];
[_peripheralManager startAdvertising:peripheralData];
!
//opcional
[[UIApplication sharedApplication] setIdleTimerDisabled: YES];
14. Donde encuentro un iBeacon?
!
Además, acutalmente hay varios fabricantes que comercializan iBeacons e
imagino que el número crecerá, algunos son estos:
RedBearLAb, plug in board for arduino http:/
/redbearlab.com/
bleshield
Kontakt http:/
/kontakt.io/order-now
GeoHopper http:/
/geohopper.com/bleu/pricing
Estimote http:/
/estimote.com
Remotte http:/
/remotte.com
De las opciones de arriba la que me parecío más interesante fué la de
Estimote.
15. Qué oferece Estimote?
Los iBeacons distribuidos por Estimote tienen las siguientes carácterísticas:
CPU 32.bit ARM Cortex con 256kb de memoria flash.
Acelerómetro.
Sensor de temperatura.
SDK, realmente es un wrapper de CLLocationManager,
CLBeaconRegion y CLBeacon. A parte de ofrecerte una api para
modificar la configuración de los iBeacons (No el proximityUUID, viene
fijo de fábrica), actualizar el firmaware, modificar la frecuencia de
emisión,....
Autonomía de 2 años y alcance de 70 metros (en un escenaro ideal,
sin interferencias)
Es estanco afirman que puede funcionar bajo el agua.
Si he de decir, que está en versión beta y el SDK, no permite exprimir al
máximo los ibeacons aún.
16. Qué usos se le puede
dar a un iBeacon?
Geoposicionamiento “indoor”, crear zonas, Proximidad,...lo que se
te ocurra a partir de la detección de 1 punto o región.
En Passkit, ahora podemos añadir en el json el uuid y el texto a
mostrar, el dispositivo detectará el beacon cuando esté cerca de
él y mostrará una alaerta con el texto indicado.
En combinación con el nuevo Framework Multipeer Connectivity,
para detectar usuarios o apps, con las que puedas intercambiar
información, alertando al usuario de ello.
17. Casos de uso
iBeacons Used To Deliver Location-Based Access To iOS Newsstand
Publications
Macy's tests location-specific store discounts using Apple's iBeacon
Apple Feature to Turn MLB Stadiums Into Interactive
Playgrounds
PayPal Beacon
19. Enlaces de Interés
Bibliografía
Bluetooth Low Energy, Beacons and Retail
With iBeacon, Apple is going to dump on NFC and embrace the
internet of things
What’s New in Core Location WWDC 2013
Core Location Framework Reference
Can you Smell the iBeacon?
Reverse Engineering the Estimote
20. Enlaces de Interés
Código ejemplo:
Demo 1. iBeacon Emitter for iOS
Demo2. Working with iBeacons
Beacon emitter for Mac
iOS 7 SDK: iBeacons Game