Desarrollando una aplicación de detección de iBeacons

4
19066

Desarrollando una aplicación de detección de iBeacons

Índice de contenidos

1. Introducción
2. Entorno
3. Desarrollando la aplicación
3.1. Creación de un nuevo proyecto con XCode
3.2. Código para monitorización de los iBeacons
3.3. Lanzando nuestra aplicación
4. Conclusiones
5. Referencias

1. Introducción

iBeacon es el nombre comercial que da Apple a un sistema basado en Bluetooth Low Energy (BLE, Bluetooth 4.0, Bluetooth LE, Bluetooth Smart) que extiende los servicios de localización de iOS (Core Location) y permite la detección de unos dispositivos conocidos como beacons cuando nos aproximamos a ellos.

beacons

Bajo este sistema los beacons se limitan a emitir unas señales sobre Bluetooth 4.0 de forma continua. Estas señales contienen información relativa al dispositivo, localización y nuestra proximidad. De este modo una aplicación perteneciente a un negocio podría ser lanzada cuando se detectara la proximidad a uno de sus establecimientos con un sistema de beacons establecido.

Aunque este sistema tiene un nombre inventado por Apple, no está limitado a dispositivos iOS u OS X. De hecho, siempre y cuando se disponga de una API para tratar la información de los beacons, los dispositivos compatibles con Bluetooth 4.0 y Android 4.3 o superior ya pueden utilizarlos.

iOS 5 ya tenía soporte para trabajar con Bluetooth 4.0 a través de Core Bluetooth pero no ha sido hasta iOS 7 que Apple ha puesto a disposición de los desarrolladores una API de alto nivel para trabajar directamente con el sistema iBeacon. El mecanismo consistió en extender la clase Core Location añadiendo una API nueva para manejar los iBeacons. En el siguiente apartado veremos qué métodos y clases deben utilizarse para la monitorización y acceso a la información desde una sencilla app.

2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro 15 pulgadas (2.4 GHz Intel i7, 8GB 1333 Mhz DDR3, 500GB Flash Storage).

  • Sistema Operativo: Mac OS X Lion 10.9.1

  • XCode 5.1 (versión beta)

  • iBeacons Proveedor Kontakt.io

  • iPod Touch 5 generación (instalada versión 7.1 iOS)

3. Desarrollando la aplicación

En este apartado construiremos una pequeña app que detecte iBeacons y muestre un listado de ellos. Se podrá acceder al detalle de cada uno para ver la información desglosada.

3.1. Creación de un nuevo proyecto con XCode

Creamos un proyecto desde New -> Project -> Master-Detail Application. Hemos elegido este tipo de aplicación por comodidad ya que implementa por defecto un table view. Este table view servirá para mostrar nuestro listado de iBeacons.

crear-nuevo-proyecto

El nombre de nuestra aplicación será AppBeacons.

master-detail-app

La arquitectura de nuestro proyecto se compone de los siguientes ficheros:

  • Main.storyboard: Definiremos gráficamente nuestras pantallas y las asociaremos con los contorladores
  • AppDelegate: Delegado prinicipal de la aplicación.
  • MasterViewController: Controlador de la pantalla de inicio y que visualizará una tabla con los iBeacons detectados.
  • DetailViewController: Controlador de la pantalla de detalle al seleccionar una celda de la tabla. En el detalle se podrá acceder a información relevante del iBeacon.

El proyecto por defecto se compone de una vista principal que muestra una tabla editable y una segunda vista que muestra el detalle de una celda al seleccionarla. Para nuestro tutorial esta aplicación nos vale, pero necesitamos «limpiar» el controlador principal de nuestra aplicación.

Abrimos el fichero MasterViewController.m y eliminamos el código de edición de filas, quedando un esqueleto como el que sigue:

El delegado AppDelegate viene con unos métodos implementados por defecto que no necesitamos. Únicamente dejaremos implementado didFinishLaunchingWithOptions para comprobar que en background la aplicación se refresca:

Ya tenemos nuestra aplicación preparada. Hasta ahora debería mostrar una tabla vacía:

salida-app

3.2. Código para monitorización de los iBeacons

Para la detección de iBeacons se hace uso de la librería CoreLocation y CoreBluetooth. Accedemos a la sección Build Phases de nuestro target.

build-phases

Añadimos los enlaces a las librerías.

enlaces-librerias

Necesitamos definir unas constantes y propiedades privadas en nuestro controlador. Estas propiedades contendrán toda la información de localización y array auxiliar donde almacenaremos los beacons detectados para asociarlo al table view.

Notar que para acceder al array detectedBeacons se accede previamente a la instancia a través de self. Esta notación es una buena práctica ya que aporta legibilidad.

Ahora debemos indicar que nuestro controlador implementa el protocolo para la detección de beacons. Abrimos MasterViewController.h e incluimos lo siguiente:

Para comenzar la monitorización de iBeacons hay que definir la región e inicializar el manager de localización. Actualizamos el evento del view controller viewDidLoad con el siguiente código:

Hay que tener en cuenta que al definir la región de nuestros iBeacons es necesario indicar el ProximityUUID del proveedor y un identificador para la región. Para los beacons de kontakt el ProximityUUID es F7826DA6-4FA2-4E98-8024-BC5B71E0893E.

El siguiente paso es implementar los métodos del protocolo que detectan cuándo está el dispositivo dentro de una regi&oacite;n para monitorizar.

El método didDetermineState es el encargado de detectar si el dispositivo se encuentra dentro de una región definida y en ese caso comenzar a monitorizar los beacons:

El método didRangeBeacons es el que nos proporciona los beacons detectados en nuetra región. Aquí será donde refresquemos la tabla con los nuevos beacons detectados:

Terminamos modificando el método del datasource que muestra el contenido en la tabla para que nos muestre el major y minor de los beacons detectados:

Podemos mostrar más en detalle la información del iBeacon seleccionado. Para ello, adaptamos el controlador de detalle, DetailViewController.

DetailViewController.h

DetailViewController.m

3.3. Lanzando nuestra aplicación

El resultado será una app que en su pantalla principal muestra los iBeacons detectados. Recordar que la aplicación necesita que el dispositivo tenga el bluetooth activado.

Listado de iBeacons detectados:

range-beacons

Detalle de iBeacon:

range-beacons

4. Conclusiones

iOS ofrece a través de Core Location una API sencilla para poder detectar estos dispositivos desde sencillas apps. Los iBeacons todaví necesitan ser explotados, pero son potencialmente mucho más precisos que detección de ubicaciones por GPS.

El dispositivo como tal no tiene mucha complejidad y se limita a enviar continuamente una información. La complejidad del desarrollo recae en la aplicación que tenga que explotar los datos enviados por el iBeacon. Por ejemplo, para saber la ubicación geográfica concreta, deberíamos desarrollar una app que a partir de los datos del iBeacon detectado recuperara esta información a través de la red. No obstante, todav´a hay mucha diferencia entre proveedores y encontrar la información necesaria y una API potente no es algo trivial.

5. Referencias

Este pequeño ejercicio lo he realizado apoyándome en varias fuentes:

  • http://maniacdev.com/2013/10/example-an-app-using-the-new-ios-7-ibeacon-api
  • http://www.punteroavoid.com/blog/2014/02/18/ibeacon-101/

Puedes descargarte el código del tutorial desde mi repositorio de github pinchando aquí.

Un saludo.

Sara

4 Comentarios

  1. Ahora por suerte ya tenemos los Eddystone Beacons, nosotros ayudamos a realizar proyectos con Eddystone Beacons i IOT No solo somos una tienda On line, estamos especializados en el protocolo Eddystone y el Api de Google Nearby

Dejar respuesta

Please enter your comment!
Please enter your name here