iOS 7 SDK Jeu iBeacons

Ce tutoriel vous guidera à travers la nouvelle technologie iBeacons. Afin d'expliquer cette technologie de manière intéressante, vous allez créer une application "chaude et froide" dans ce tutoriel. L'application analysera la région balise et vous informera en conséquence.


introduction

iBeacon est une technologie introduite dans iOS 7 qui vous permet d'ajouter une surveillance précise de la région de localisation à votre application. En dépit du fait que iBeacon est classé parmi les technologies Core Location, iBeacon utilise la technologie Bluetooth Low Energy.

iBeacons prend en charge trois types de profils de distance entre l’iBeacon et le périphérique: immédiat, près, et loin. À travers ces distances, il est possible de suivre le mouvement de l'appareil dans la portée de l'iBeacon. Les iBeacons fonctionnent de concert avec la surveillance de région spécifique. Une application iOS peut être configurée pour vérifier une signature iBeacon spécifique. Lorsque le périphérique iOS se trouve à proximité de cette iBeacon, l'application en informe l'utilisateur..

Pour transformer un appareil iOS 7 en iBeacon, vous devez créer une instance de CLBeaconRegion. Il doit être créé avec le UUID et Identifiant Propriétés. Cependant, vous pouvez également déclarer et définir deux autres propriétés (non requises): Valeur majeure et Valeur mineure.

Notez que l'UUID est un identifiant unique iBeacon. Ainsi, le paramètre UUID doit être unique pour votre application. Si votre application utilise plusieurs périphériques en tant que iBeacons, ils doivent tous partager le même UUID. Dans ce cas, vous devez configurer les iBeacons par la valeur de proximité, en utilisant les valeurs majeure et mineure, créant ainsi des groupes singuliers identifiant chaque iBeacon..

Puisque vous savez maintenant ce qu’est un iBeacon et ses propriétés de base, nous pouvons implémenter un iBeacon. Pour réussir ce didacticiel, vous avez besoin de deux appareils iOS prenant en charge Bluetooth 4.0 (iPhone 4 ou supérieur). L'un des périphériques crée et notifie l'iBeacon, tandis que l'autre reçoit le signal et présente des informations concernant la distance de ce périphérique à l'iBeacon..

Voici à quoi ressemblera notre résultat final:

Illustration du résultat final

1. Téléchargement du code

L'objectif de ce didacticiel étant de vous apprendre à créer et à implémenter un iBeacon, nous vous fournirons un exemple de code avec plusieurs vues et objets déjà définis. Vous pouvez télécharger l'exemple de code au début de cette page.

Néanmoins, l'exemple de code contient les éléments suivants:

  • Une application qui utilise le contrôleur de navigation et trois vues et contrôleurs.
  • Le contrôleur de vue initial ViewController avec deux boutons (Envoyer iBeacon et recevez iBeacon Ma proximité).
  • UNE SendViewController qui crée un iBeacon personnalisé.
  • UNE GetViewController qui reçoit le iBeacon et présente les informations concernant la distance à ce iBeacon.

Toutes les vues sont déjà placées et correctement définies. Vous devez juste ajouter le code pour le processus iBeacon. Ouvrez le projet, lancez-le et jouez avec les objets afin de vous familiariser avec le code. L'image suivante présente l'image que vous verrez lorsque vous exécuterez le projet pour la première fois..


Illustration de l'interface principale de l'application

Notez que comme mentionné ci-dessus, deux cadres sont inclus:

 #importation  #importation 

Si vous le souhaitez, vous pouvez consulter la documentation-cadre officielle des deux CoreLocation et CoreBluetooth.


2. Créer un iBeacon

Mettons-nous au travail! Notre première étape consiste à nous concentrer sur SendViewController.h fichier. Ici, vous allez définir les propriétés inhérentes à la définition de iBeacon et le délégué approprié.

Vous avez besoin de trois propriétés pour créer l'iBeacon: a CLBeaconRegion, une CBPeripheralManager, et un NSDictionary. le CLBeaconRegion objet définit un type de région basé sur la proximité du périphérique avec une balise Bluetooth. Il recherche les appareils dont les informations d'identification correspondent à celles que vous avez fournies. Lorsque ce périphérique entre dans la plage, la région déclenche l'envoi d'une notification appropriée. le CBPeripheralManager object gère les services publiés dans la base de données GATT (General Attribute Attribute Profile) du périphérique local et diffuse ces services dans des périphériques centraux. Finalement, le NSDictionary stocke les informations qui seront publiées ultérieurement. Cela dit, l'extrait suivant vous aidera à créer ces propriétés:

 @property (strong, nonatomic) CLBeaconRegion * beaconRegion; @property (strong, nonatomic) NSDictionary * beaconPeripheralData; @property (strong, nonatomic) CBPeripheralManager * périphériqueManager;

En termes de délégué, vous utiliserez le CBPeripheralManagerDelegate. Ce protocole est utilisé par le délégué pour vérifier la publication et la publicité et pour surveiller les demandes de lecture, d'écriture et d'abonnement émanant de périphériques centraux distants..

 @interface SendViewController: ViewController < CBPeripheralManagerDelegate>

Enregistrez votre projet et passez à la SendViewController.m fichier. Un avertissement vous attendra. Avant de résoudre ce problème, initialisez et allouez des ressources pour les propriétés précédentes. dans le - (void) viewDidLoad méthode, vous devriez d'abord commencer à initialiser le beaconRegion en utilisant un UUID unique. L’UUID peut être généré en utilisant le Terminal.app et la commande Uuidgen.

Ici le _beaconRegion L'objet est initialisé à l'aide de quatre propriétés (deux obligatoires et deux facultatives). Notez que vous pouvez l’initialiser avec trois méthodes différentes (consultez la documentation). La première propriété est l'unique UUID, les deuxième et troisième sont facultatives et sont liées aux spécifications à l'intérieur de l'application (groupe et balise à l'intérieur du groupe). La dernière propriété est l'identifiant iBeacon. L'extrait est:

 NSUUID * uuid = [[NSUUID alloc] initWithUUIDString: @ "F2037E44-13BF-4083-A3A6-514A17BBBA10"]; _beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID: uuid majeur: 1 mineur: 1 identifiant: @ "com.MobileTuts.iBeacons"];

Afin de donner un retour à l'utilisateur, mettez à jour l'étiquette avec l'UUID généré avant:

 _uuidLabel.text = _beaconRegion.proximityUUID.UUIDString;

Vous devez maintenant initialiser les deux propriétés de classe restantes. le _beaconPeripheralData appelle le _beaconregion périphériqueDataWithMeasuredPower méthode qui récupère les données pouvant être utilisées pour annoncer le périphérique actuel en tant que balise. le _peripheralManager est initialisé avec le délégué pour recevoir les événements de rôle de périphérique, la file d'attente de distribution pour la distribution des événements de rôle de périphérique et un dictionnaire facultatif contenant les options d'initialisation d'un gestionnaire de périphérique. Voici l'extrait complet:

 _beaconPeripheralData = [_beaconRegion périphériqueDataWithMeasuredPower: nil]; _peripheralManager = [[CBPeripheralManager alloc] initWithDelegate: file d'attente auto: aucune option: aucune];

À ce stade, vous avez alloué les ressources nécessaires. Il vous suffit donc de corriger l'avertissement. Ajouter le -(void) deviceParameterDidUpdateState: (CBPeripheralManager *) méthode déléguée. Cette méthode est utilisée pour vérifier l'état de l'appareil et, en tenant compte de l'état, l'application agit en conséquence. Dans ce cas, si l'état est CBPeripheralManagerStatePoweredOn, l'application va commencer la publicité. Il y a plusieurs états disponibles. Dans une application réelle, vous devriez tous les tester. Les états sont:

  • CBCentralManagerStateUnknown
  • CBCentralManagerStateResetting
  • CBCentralManagerStateUnsupported
  • CBCentralManagerStateUnauthorized
  • CBCentralManagerStatePoweredOff
  • CBCentralManagerStatePoweredOn

Voici la méthode complète à implémenter:

 -(void) deviceParameterDidUpdateState: (CBPeripheralManager *) périphérique if (périphérique.etat == CBPeripheralManagerStatePoweredOn) NSLog (@ "On"); [_peripheralManager startAdvertising: _beaconPeripheralData];  else if (périphérique.etat == CBPeripheralManagerStatePoweredOff) NSLog (@ "Off"); [_peripheralManager stopAdvertising]; 

À ce stade, iBeacon est créé et configuré. Vous pouvez maintenant lancer la publicité iBeacon. Cependant, vous devez implémenter une application cliente pour l'essayer. La prochaine étape vous guidera pour y parvenir. L'image suivante présente l'interface utilisateur que vous devriez voir lorsque vous exécutez l'application..


Illustration de l'iBeacon

3. Recevez un iBeacon

Pour changer votre vue à la GetViewController.h classe définit deux objets, un CLBeaconRegion et l'autre CLLocationManager. le CLBeaconRegion est similaire à la définition susmentionnée, et vous ne devriez avoir aucune difficulté dans le processus de création. le CLLocationManager définit l'interface de configuration de la livraison d'événements liés à l'emplacement à votre application.

 @property (strong, nonatomic) CLBeaconRegion * beaconRegion; @property (strong, nonatomic) CLLocationManager * locationManager;

De plus, vous devez définir un délégué de protocole, cette fois le CLLocationManagerDelegate.

 @interface GetViewController: ViewController 

Passons maintenant au GetViewController.m et permettons et initialisons les objets. le _locationManager est simple et vous devez définir le délégué à soi-même. Ensuite, vous devez créer un UUID et définir le _beaconRegion. De plus, vous devez définir une région pour la surveillance. Dans ce cas, vous surveillerez le _beaconRegion Région.

 _locationManager = [[CLLocationManager alloc] init]; _locationManager.delegate = self; NSUUID * uuid = [[NSUUID alloc] initWithUUIDString: @ "F2037E44-13BF-4083-A3A6-514A17BBBA10"]; _beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID: identificateur uuid: @ "com.MobileTuts.iBeacons"]; [_locationManager startMonitoringForRegion: _beaconRegion];

Maintenant, vous devez définir les trois méthodes suivantes:

  • - (void) locationManager: (CLLocationManager *) manager didEnterRegion: (CLRegion *) région
  • -(void) locationManager: (CLLocationManager *) gestionnaire didExitRegion: (CLRegion *) région
  • -(void) locationManager: (CLLocationManager *) manager didRangeBeacons: (NSArray *) balises dans la région: (CLBeaconRegion *) région

Les noms sont explicites, mais le premier indique au délégué que l'utilisateur a entré la région spécifiée. Le second indique au délégué que l'utilisateur a quitté la région spécifiée et le dernier indique au délégué qu'un ou plusieurs balises sont à sa portée. Cette dernière méthode est obligatoire.

La première méthode commence seulement à envoyer des notifications pour les balises de la région spécifiée, alors que la seconde fait le contraire. Il arrête la livraison des notifications pour les balises dans la région spécifiée. Les méthodes complètes sont:

 - (void) locationManager: (CLLocationManager *) manager didEnterRegion: (CLRegion *) région NSLog (@ "Balise trouvée"); [_locationManager startRangingBeaconsInRegion: _beaconRegion];  - (void) locationManager: (CLLocationManager *) manager didExitRegion: (CLRegion *) région NSLog (@ "Région gauche"); [_locationManager stopRangingBeaconsInRegion: _beaconRegion]; 

Enfin, la dernière méthode acquiert les données des balises disponibles et les transforme sous la forme souhaitée par l'utilisateur. Pour recevoir correctement les données, créez un CLBeacon objet. Il met à jour l'étiquette et modifie la couleur de l'arrière-plan, en tenant compte de la distance du iBeacon. Le code source complet de la méthode est le suivant:

 -(void) locationManager: (CLLocationManager *) manager didRangeBeacons: (NSArray *) balises inRégion: (CLBeaconRegion *) région CLBeacon * beacon = [[CLBeacon alloc] init]; balise = [balises lastObject]; self.UUID.text = beacon.proximityUUID.UUIDString; if (beacon.proximity == CLProximityUnknown) _distanceLabel.text = @ "Proximité inconnue"; [_view setBackgroundColor: [UIColor blackColor]];  else if (beacon.proximity == CLProximityImmediate) _distanceLabel.text = @ "Immediate"; [_view setBackgroundColor: [UIColor redColor]];  else if (beacon.proximity == CLProximityNear) _distanceLabel.text = @ "Proche"; [_view setBackgroundColor: [UIColor orangeColor]];  else if (beacon.proximity == CLProximityFar) _distanceLabel.text = @ "Loin"; [_view setBackgroundColor: [UIColor blueColor]]; 

Tu peux maintenant Courir l'application (dans deux appareils distincts) et testez les balises. Notez que vous devez laisser les deux appareils entre cinq et quinze mètres pour quitter et entrer de nouveau dans la zone prédéfinie. Cependant, il existe une solution simple que vous pouvez appliquer afin de tester l'application sans avoir à déplacer cet espace. Vous devez déclarer une méthode supplémentaire (- (void) locationManager: (CLLocationManager *) manager didStartMonitoringForRegion: (CLRegion *) région) indiquant que la région est directement liée à la région de cette balise.

 - (void) locationManager: (CLLocationManager *) manager didStartMonitoringForRegion: (CLRegion *) région [_locationManager startRangingBeaconsInRegion: _beaconRegion]; 

De plus, vous devez appeler manuellement cette méthode dans le receiveiBeacon: expéditeur (id).

 [auto locationManager: _locationManager didStartMonitoringForRegion: _beaconRegion];

Courir le projet et tester les fonctionnalités! Éloignez-vous de votre appareil iBeacon et vérifiez votre interface. Vous devriez obtenir des écrans similaires aux images suivantes lorsque vous vous trouvez à proximité:

Illustration d'une proche distance

Ou celui-ci lorsque vous êtes loin de votre périphérique iBeacon:

Illustration d'une distance lointaine

Conclusion

À la fin de ce didacticiel, vous devriez pouvoir définir, configurer et utiliser les iBeacons. Si vous avez des questions ou des commentaires, n'hésitez pas à les laisser ci-dessous!