iOS 7 SDK Core Bluetooth - Présentation théorique

La structure Core Bluetooth (CB) fournit les ressources nécessaires aux applications iOS pour communiquer avec les périphériques équipés de la technologie Bluetooth Low Energy (BTLE). Ce tutoriel vous guidera à travers l'évolution de CB d'iOS 5 à iOS 7. De plus, vous apprendrez à configurer un central et un périphérique Bluetooth central, à communiquer entre eux et à connaître les meilleures pratiques de programmation..


introduction

Les didacticiels Core Bluetooth sont divisés en deux sections. Le premier traite de l'aspect théorique de Core Bluetooth, le second sert de cours pratique complet. Vous trouverez ici le code source complet du didacticiel, ainsi qu'un projet de démarrage supplémentaire..


1. Origines

BTLE est basé sur la spécification Bluetooth 4.0, qui définit notamment un ensemble de protocoles pour la communication entre des périphériques basse consommation. Dans BTLE, il existe deux profils:

  • Le central: définit généralement la logique derrière une communication CB. Il est capable de scanner, connecter et déconnecter des périphériques. De plus, il consomme les informations disponibles sur chaque périphérique.
  • Périphérique: un appareil qui a des informations importantes à partager (fréquence cardiaque, température, etc.). L'information peut être poussée ou annoncée sur les ondes.

L'image suivante montre un périphérique central et un périphérique:


Illustration des appareils centraux et périphériques.

Chaque "profil" représente un objet iOS équivalent, à savoir le CBCentralManager et le CBPériphérique.

Comme indiqué précédemment, le CBCentralManager gère les périphériques distants découverts ou connectés (CBPériphérique). Aussi tôt que le CBCentralManager se connecte à un périphérique, l'interaction avec ses données commence. Les données stockées dans les périphériques sont organisées dans une arborescence hiérarchique basée sur ses services et caractéristiques..

Ces services peuvent être Service de notification d'alerte, Tension artérielle, Rythme cardiaque, etc. La liste officielle des GATT les spécifications de services se trouvent sur cette page.

La caractéristique d'un service dans la pratique est la valeur du service. Dans ce tutoriel, le Tension artérielle service est la valeur de la pression artérielle à un moment donné. La figure suivante illustre un périphérique personnalisé avec un service et deux caractéristiques.


Illustration d'un périphérique personnalisé avec un service et deux caractéristiques.

Dans Core Bluetooth, les services d’un périphérique distant sont représentés par CBService objets. De même, les caractéristiques d’un service de périphériques distants sont représentées par CBCharactéristique objets. La figure suivante illustre la structure hiérarchique d’un CBService périphérique.


Illustration d'un service périphérique.

Un périphérique donné peut avoir plusieurs services et plusieurs caractéristiques pour chaque service. Il n'y a pas de nombre limite spécifique pour chacun.

Notez que vous devez lire et apprendre la référence officielle du cadre Bluetooth pour comprendre parfaitement cette technologie..


2. Core Bluetooth Evolution

Le Core Bluetooth Framework est apparu dans iOS 5 et a introduit un nouveau moyen de communication entre périphériques utilisant la technologie sans fil Bluetooth. Au cours de chaque version iOS, Apple améliore et ajoute de nouvelles fonctionnalités à Core Bluetooth.

Dans iOS 5, les principales fonctionnalités Bluetooth de base étaient les suivantes: CBCentralManager, CBPériphérique, Central, Client et Observateur. Dans cette version seulement deux classes existaient, le CBCentralManager et CBPériphérique. La première classe a été conçue pour découvrir et connecter plusieurs périphériques (limités). La deuxième classe était responsable de la visualisation d'un appareil et créait un mécanisme permettant à la centrale d'accéder aux données disponibles sur les services distants..

Dans iOS 6, Apple a introduit plusieurs fonctionnalités et améliorations Bluetooth principales, notamment: CBPeripheralManager, Mise en cache, base de données, périphérique et serveur de la base de données périphérique. La principale caractéristique était la Serveur rôle. Il permettait aux développeurs de créer et de spécifier des services personnalisés. De plus, le CBPeripheralManager introduit un moyen personnalisé de créer des services et des mécanismes qui définissent la manière dont les informations sont publiées sur le réseau. En outre, la mise en cache de la base de données périphérique a considérablement amélioré les performances générales de Bluetooth (en particulier dans la phase de découverte)..

Après quelques années de collecte de commentaires, Apple a affiné le framework Bluetooth sous iOS 7 avec les fonctionnalités suivantes:

  • Gestion simplifiée des appareils
  • Périphériques plus intelligents
  • Amélioration des performances
  • Persistance de l'application
  • Services intégrés
  • Préservation et restauration de l'état
  • La mise en cache de la base de données a évolué et prend désormais en charge les services, les caractéristiques et les descripteurs (auparavant, seuls les services et les caractéristiques stockés).
  • Pour l'envoi de données, la quantité de données transmise a également changé. Il est maintenant possible de prendre en charge les demandes d’échange de MTU et de modifier la quantité maximale de données par PDU..
  • iBeacon est une technologie qui permet aux utilisateurs de vérifier l'emplacement et la proximité d'un périphérique spécifique et du périphérique iOS de l'utilisateur..
  • Le centre de notification Apple (ANCS) est un service GATT spécifique à Apple qui expose les caractéristiques nécessaires pour que les accessoires puissent être alertés de tout événement de notification sur le périphérique iOS (notifications arrivant, en cours de modification ou rejetées) et pour obtenir plus d'informations sur ces événements. . Grâce à ce service, les développeurs d'accessoires externes ont un accès complet aux événements de périphérique. Cependant, la version actuelle ne prend en charge que la lecture des données de notification..

Si vous souhaitez commencer à jouer avec le développement de BTLE, vous devez tenir compte des considérations suivantes:

  • Notez qu'Apple diminue la prise en charge du simulateur iOS pour Core Bluetooth. Ainsi, le meilleur moyen de tester votre code est de l'exécuter directement sur un périphérique iOS..
  • Vous avez besoin d'un appareil iOS prenant en charge le matériel pour Bluetooth 4.0. Tous les appareils commercialisés depuis l'iPhone 4S (y compris le 4S) prennent en charge Bluetooth 4.0..
  • Votre application peut communiquer avec un périphérique BTLE (il peut s’agir d’un deuxième appareil iOS ou d’un Mac)..

3. Traitement en arrière-plan CB

Définir la manière dont une application réagit à un arrière-plan ou à un état au premier plan est crucial. Chaque application doit se comporter différemment en arrière-plan et en avant-plan car les ressources système sont limitées. Par défaut, de nombreuses tâches CB courantes (sur le périphérique central et sur le périphérique) sont désactivées lorsque votre application est en arrière-plan ou dans un état suspendu. Toutefois, vous pouvez déclarer que votre application prend en charge les modes d'exécution en arrière-plan Core Bluetooth afin de lui permettre de sortir d'un état suspendu pour traiter certains événements..

Notez que même si votre application prend en charge l'un ou l'autre des modes d'exécution en arrière-plan du disjoncteur, elle ne peut pas s'exécuter indéfiniment. À un moment donné, le système peut avoir besoin de mettre fin à votre application pour libérer de la mémoire pour l'application de premier plan actuelle, car iOS est souverain dans la gestion de la mémoire. Néanmoins, Core Bluetooth prend en charge la sauvegarde des informations d'état pour les objets du gestionnaire central et des gestionnaires de périphériques et la restauration de cet état au moment du lancement de l'application..

Si votre application ne prend pas en charge les activités en arrière-plan, tous les événements Bluetooth qui se produisent lorsque l'application est suspendue sont mis en file d'attente par le système et déclenchés vers l'application lorsqu'il est au premier plan. Ces alertes peuvent être définies lors de l'appel du connectPeripheral: options: méthode du CBCentralManager classe lorsqu’une connexion au périphérique est établie. Il existe trois types d'alertes:

  • CBConnectPeripheralOptionNotifyOnConnectionKey lorsque vous souhaitez que le système affiche une alerte pour un périphérique donné si l'application est suspendue lorsqu'une connexion est établie.
  • CBConnectPeripheralOptionNotifyOnDisconnectionKey lorsque vous souhaitez que le système affiche une alerte de déconnexion pour un périphérique donné si l'application est suspendue au moment de la déconnexion.
  • CBConnectPeripheralOptionNotifyOnNotificationKey lorsque vous souhaitez que le système affiche une alerte pour toutes les notifications reçues d'un périphérique donné si l'application est suspendue à ce moment.

Par contre, si votre application prend en charge le mode d’arrière-plan, vous devez le déclarer (UIBackgroundModes) dans le fichier de liste de propriétés (Info.plist). Lorsque votre application le déclare, le système le sort de l'état suspendu pour lui permettre de gérer les événements Bluetooth. Cette assistance est importante pour les applications qui interagissent avec des périphériques Bluetooth basse consommation qui transmettent des données à intervalles réguliers, tels qu'un moniteur de fréquence cardiaque. Il y a deux rôles de base: l'un pour les périphériques centraux et l'autre pour les périphériques..


4. Meilleures pratiques pour un CBCentralManager

Bien que la structure Bluetooth centrale rende transparente la plupart des transactions centrales pour votre application, vous devez prendre en compte plusieurs options lors du développement d'une application Bluetooth. Étant donné que vous utilisez des appareils basse consommation, n'oubliez pas que chaque opération draine de l'énergie de votre appareil Bluetooth..

Par conséquent, vous devez prendre en compte les éléments suivants:

  • Analyse de l'appareil: Vous ne devez rechercher de nouveaux appareils qu'en cas d'absolue nécessité. Réduire au minimum l'utilisation de la radio est particulièrement important lors du développement d'un appareil iOS car l'utilisation de la radio a un effet négatif sur la durée de vie de la batterie d'un appareil iOS..
  • Plusieurs publicités du même appareil: Les périphériques distants peuvent envoyer plusieurs paquets publicitaires par seconde pour annoncer leur présence aux centrales d'écoute. Ainsi, vous pouvez utiliser le scanForPeripheralsWithServices: options: méthode pour empêcher cela afin que toutes les publicités d'un périphérique spécifique soient traitées comme une seule. Cependant, vous pouvez utiliser le CBCentralManagerScanOptionAllowDuplicatesKey option si vous souhaitez recevoir plusieurs annonces du même appareil.
  • Extraire judicieusement les données du périphérique. Un périphérique peut avoir de nombreux services et caractéristiques qui ne vous intéressent. Vous devez rechercher et découvrir uniquement les services et caractéristiques dont votre application a besoin..
  • S'abonner ou vérifier les valeurs des caractéristiques. Vous pouvez récupérer des caractéristiques en utilisant les entrées de l'utilisateur ou de le faire automatiquement lorsque cette caractéristique est modifiée. Vous devriez utiliser une méthode en conséquence.
  • Chaque fois que vous savez qu'une connexion n'est pas nécessaire, vous devez la terminer.. Grâce aux mécanismes de mise en cache, vous pouvez vous reconnecter rapidement. Apple a un flux de travail spécifique lorsqu'un centre essaie de se reconnecter à un périphérique. L'image suivante montre ce flux de travail:

Illustration du flux de travail de reconnexion Apple.

5. Meilleures pratiques pour un CBPériphérique

Semblable à la CBCentralManager rôle, le CBPériphérique a certaines pratiques à suivre pour créer une application Bluetooth efficace.

En ce qui concerne la publicité, n'oubliez pas que lorsque votre application est au premier plan, elle peut utiliser jusqu'à 28 octets d'espace dans les données de publicité initiale. Sachez que vous ne devez publier que des données qui comptent vraiment, non seulement pour des problèmes de performances, mais également pour que le canal reste propre. En outre, vous devez offrir à l'utilisateur un moyen de publier ses annonces à sa guise, de manière à lui permettre de contrôler la fréquence de ses annonces..

De même, lorsque vous configurez vos caractéristiques, vous devez les activer pour prendre en charge les notifications. Pour ce faire, vous devez ajouter le CBAttributePermissionsReadable propriété à la autorisations dans le CBMutableCharacteristic objet.

Sachez que Bluetooth étant une technologie émergente, de plus en plus de périphériques l'utilisent et essaient de renifler le réseau pour accéder à des données "gratuites". Pour cette raison, vous devez toujours exiger une connexion appariée pour accéder aux données sensibles de votre périphérique..


Conclusion

Après avoir lu ce didacticiel, vous devez comprendre les spécifications de l’infrastructure Core Bluetooth. Dans le prochain tutoriel, vous apprendrez à programmer un CBCentralManager et CBPériphérique.

Si vous avez des questions ou des commentaires, veuillez les laisser ci-dessous!