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.
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 finalL'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:
ViewController
avec deux boutons (Envoyer iBeacon et recevez iBeacon Ma proximité
).SendViewController
qui crée un iBeacon personnalisé.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..
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.
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:
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..
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:
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é:
Ou celui-ci lorsque vous êtes loin de votre périphérique iBeacon:
Illustration d'une distance lointaineÀ 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!