iOS 7 SDK Core Bluetooth - theoretisch overzicht

Het Core Bluetooth (CB) -raamwerk biedt de benodigde bronnen voor iOS-apps om te communiceren met apparaten die zijn uitgerust met Bluetooth Low Energy-technologie (BTLE). Deze tutorial leidt je door de evolutie van CB van iOS 5 naar iOS 7. Je leert ook hoe je een Core Bluetooth-centrale en -randapparatuur kunt configureren, hoe je ertussen kunt communiceren en wat de beste programmeermethoden zijn..


Invoering

De Core Bluetooth-zelfstudies zijn verdeeld in twee secties. De eerste behandelt het theoretische aspect van Core Bluetooth, terwijl de tweede als een complete praktische les dient. Hier vindt u de volledige broncode voor de praktische zelfstudie plus een extra startproject.


1. Achtergrond

BTLE is gebaseerd op de Bluetooth 4.0-specificatie, die onder andere een reeks protocollen definieert voor communicatie tussen apparaten met lage energie. In BTLE zijn er twee profielen:

  • De centrale: definieert meestal de logica achter een CB-communicatie. Het is in staat om randapparatuur te scannen, verbinden en ontkoppelen. Bovendien verbruikt het de informatie die bij elk randapparaat beschikbaar is.
  • perifere: een apparaat dat belangrijke informatie heeft om te delen (hartslag, temperatuur, enz.). De informatie kan door de lucht worden gepusht of geadverteerd.

De volgende afbeelding toont een centraal en een randapparaat:


Illustratie van centrale en randapparatuur.

Elk "profiel" vertegenwoordigt een gelijkwaardig iOS-object, namelijk het CBCentralManager en de CBPeripheral.

Zoals eerder vermeld, de CBCentralManager beheert ontdekte of aangesloten externe randapparatuur (CBPeripheral). Zo snel als de CBCentralManager maakt verbinding met een randapparaat, interactie met zijn gegevens begint. Gegevens die zijn opgeslagen in randapparatuur worden georganiseerd in een hiërarchische structuur op basis van de services en kenmerken.

Deze diensten kunnen zijn Alert Notification Service, Bloeddruk, Hartslag, etc. De officiële lijst van GATT servicespecificaties zijn te vinden op deze pagina.

Het kenmerk van een dienst in de praktijk is de servicewaarde. In deze zelfstudie, de Bloeddruk dienst is de bloeddrukwaarde op een bepaald moment. De volgende afbeelding illustreert een aangepast randapparaat met één service en twee kenmerken.


Illustratie van een aangepast randapparaat met één service en twee kenmerken.

In Core Bluetooth worden de services van een randapparaat op afstand weergegeven door CBService voorwerpen. Op dezelfde manier worden de kenmerken van een externe randapparatuurservice weergegeven door CBCharacteristic voorwerpen. De volgende afbeelding illustreert de hiërarchische structuur van een CBService perifeer.


Illustratie van perifere diensten.

Een gegeven randapparaat kan meerdere services en meerdere kenmerken hebben voor elke service. Er is geen specifiek limietnummer voor elke limiet.

Merk op dat u de officiële Core Bluetooth Framework Reference moet lezen en leren om een ​​volledig begrip van deze technologie te krijgen.


2. Core Bluetooth Evolution

Het Core Bluetooth Framework verscheen in iOS 5 en introduceerde een nieuwe manier om te communiceren tussen apparaten met behulp van Bluetooth draadloze technologie. Tijdens elke iOS-release verbetert Apple en voegt nieuwe functies toe aan Core Bluetooth.

In iOS 5 waren de belangrijkste Core Bluetooth-functies de CBCentralManager, CBPeripheral, Central, Client en Observer. In deze versie waren er slechts twee klassen, de CBCentralManager en CBPeripheral. De eerste klas is ontworpen om verschillende (beperkte) randapparatuur te ontdekken en aan te sluiten. De tweede klasse was verantwoordelijk voor de visualisatie van een apparaat en creëerde een mechanisme dat de centrale toegang gaf tot gegevens die beschikbaar zijn op externe services.

In iOS 6 introduceerde Apple verschillende Core Bluetooth-functies en verbeteringen, waaronder CBPeripheralManager, Peripheral Database Caching, Broadcaster, Peripheral en Server. Het belangrijkste kenmerk was de Server rol. Het stond ontwikkelaars toe om aangepaste services te maken en te specificeren. tevens de CBPeripheralManager introduceerde een aangepaste manier om services en mechanismen te creëren die bepalen hoe informatie wordt geadverteerd op het netwerk. Bovendien hebben perifere databasecaching de algemene Bluetooth-prestaties aanzienlijk verbeterd (vooral in de ontdekkingsfase).

Na een paar jaar feedback te hebben verzameld, verfijnde Apple het Bluetooth-framework in iOS 7 met de volgende functies:

  • Eenvoudiger apparaatbeheer
  • Slimmere randapparatuur
  • Prestatieverbeteringen
  • Toepassing persistentie
  • Ingebouwde services
  • Staatsbescherming en -herstel
  • Databasecaching is geëvolueerd en ondersteunt nu services, kenmerken en descriptors (voorheen alleen opgeslagen services en kenmerken).
  • Voor het verzenden van gegevens is ook de hoeveelheid verzonden gegevens gewijzigd. Het is nu mogelijk om aanvragen voor MTU-uitwisseling te ondersteunen en de maximale hoeveelheid gegevens per PDU te wijzigen.
  • iBeacon is een technologie waarmee gebruikers de locatie en de nabijheid van een specifiek apparaat en het iOS-apparaat van de gebruiker kunnen controleren.
  • Apple-meldingscenterdienst (ANCS) is een Apple-specifieke GATT-service die de kenmerken blootlegt die nodig zijn voor accessoires om te worden gewaarschuwd voor meldingsgebeurtenissen op het iOS-apparaat (meldingen die binnenkomen, worden gewijzigd of worden verworpen) en voor meer informatie over die evenementen . Via deze service hebben externe ontwikkelaars van accessoires volledige toegang tot apparaatgebeurtenissen. De huidige versie ondersteunt echter alleen het lezen van kennisgevingsgegevens.

Als u wilt beginnen met spelen met BTLE-ontwikkeling, moet u rekening houden met de volgende overwegingen:

  • Merk op dat Apple de iOS-simulatorondersteuning voor Core Bluetooth verlaagt. De beste manier om uw code te testen, is om deze rechtstreeks op een iOS-apparaat uit te voeren.
  • U hebt een iOS-apparaat nodig met hardware-ondersteuning voor Bluetooth 4.0. Alle apparaten die zijn uitgebracht sinds de iPhone 4S (inclusief de 4S) ondersteunen Bluetooth 4.0.
  • Uw app kan praten met een BTLE-randapparaat (dit kan een tweede iOS-apparaat of een Mac zijn).

3. CB-achtergrondverwerking

Het is van cruciaal belang om te definiëren hoe een app reageert op een achtergrond of voorgrondstatus. Elke app moet zich op zowel achtergrond als voorgrond verschillend gedragen, omdat systeembronnen beperkt zijn. Standaard zijn veel van de algemene CB-taken (op zowel het centrale als het randapparaat) uitgeschakeld terwijl uw app zich op de achtergrond of in een onderbroken status bevindt. U kunt echter verklaren dat uw app de implementatie-modi van de Core Bluetooth-achtergrond ondersteunt, zodat deze kan worden gewekt uit een onderbroken status om bepaalde gebeurtenissen te verwerken.

Merk op dat zelfs als uw app een of beide CB-achtergronduitvoeringsmodi ondersteunt, deze niet voor altijd kan worden uitgevoerd. Op een gegeven moment moet het systeem mogelijk uw app beëindigen om geheugen vrij te maken voor de huidige voorgrondapp, omdat iOS soeverein is in geheugenbeheer. Desondanks ondersteunt Core Bluetooth het opslaan van statusinformatie voor centrale en perifere managerobjecten en het herstellen van die status bij het opstarten van de app.

Als uw app achtergrondactiviteiten niet ondersteunt, worden alle Bluetooth-gebeurtenissen die plaatsvinden wanneer de app zich in een onderbroken status bevindt door het systeem in de wachtrij geplaatst en worden ze geactiveerd in de app als het gaat om de voorgrondstatus. Deze waarschuwingen kunnen worden gedefinieerd bij het aanroepen van de connectPeripheral: options: methode van de CBCentralManager klasse wanneer een verbinding met het randapparaat is gemaakt. Er zijn drie soorten meldingen:

  • CBConnectPeripheralOptionNotifyOnConnectionKey wanneer u wilt dat het systeem een ​​waarschuwing weergeeft voor een bepaald randapparaat als de app wordt onderbroken wanneer een verbinding tot stand is gebracht.
  • CBConnectPeripheralOptionNotifyOnDisconnectionKey wanneer u wilt dat het systeem een ​​ontkoppelingswaarschuwing weergeeft voor een bepaald randapparaat als de app is opgeschort ten tijde van het verbreken van de verbinding.
  • CBConnectPeripheralOptionNotifyOnNotificationKey wanneer u wilt dat het systeem een ​​waarschuwing weergeeft voor alle meldingen ontvangen van een bepaald randapparaat als de app op dat moment is opgeschort.

Aan de andere kant, als uw toepassing de achtergrondmodus ondersteunt, moet u deze declareren (UIBackgroundModes) in het bestand met de eigenschappenlijst (Info.plist). Wanneer uw app dit declareert, wordt het systeem uit een onderbroken status gehaald om Bluetooth-gebeurtenissen te kunnen verwerken. Deze ondersteuning is belangrijk voor apps die communiceren met Bluetooth Low Energy-apparaten die regelmatig gegevens leveren, zoals een hartslagmeter. Er zijn twee achtergrondrollen: één voor centrale apparaten en één voor randapparatuur.


4. Beste praktijken voor een CBCentralManager

Ondanks het feit dat het Core Bluetooth-framework veel van de centrale transacties transparant maakt voor uw app, zijn er verschillende opties waarmee u rekening moet houden bij het ontwikkelen van een Bluetooth-app. Omdat u te maken hebt met apparaten met een laag energieverbruik, moet u niet vergeten dat elke bewerking energie van uw Bluetooth-apparaat afvoert.

Daarom moet u rekening houden met het volgende:

  • Apparaat scannen: u moet alleen op nieuwe apparaten scannen wanneer dit absoluut noodzakelijk is. Het minimaliseren van het radiogebruik is vooral belangrijk bij het ontwikkelen van een iOS-apparaat, omdat het gebruik van radio's een negatief effect heeft op de levensduur van een iOS-apparaat.
  • Meerdere advertenties van hetzelfde apparaat: Externe randapparaten kunnen meerdere advertentiepakketten per seconde verzenden om hun aanwezigheid aan luistercentra aan te kondigen. U kunt dus de scanForPeripheralsWithServices: options: methode om dit te voorkomen, zodat alle advertenties van een specifiek apparaat als één worden behandeld. U kunt echter de CBCentralManagerScanOptionAllowDuplicatesKey optie als u meerdere advertenties van hetzelfde apparaat wilt ontvangen.
  • Pak de gegevens van de randapparatuur op verstandige wijze uit. Een randapparaat kan veel services en kenmerken hebben dan u wilt. U moet alleen naar de services en kenmerken zoeken en ontdekken die uw app nodig heeft.
  • Abonneer of controleer de kenmerkenwaarden. U kunt kenmerken ophalen door gebruikersinvoer te gebruiken of dit automatisch te doen wanneer dat kenmerk verandert. U zou dienovereenkomstig één methode moeten gebruiken.
  • Telkens wanneer u weet dat een verbinding niet nodig is, moet u deze beëindigen. Dankzij caching-mechanismen kunt u snel opnieuw verbinding maken. Apple heeft een specifieke workflow wanneer een centrale probeert opnieuw verbinding te maken met een apparaat. De volgende afbeelding laat zien dat de workflow verloopt:

Illustratie van de werkstroom van Apple-heraansluiting.

5. Beste praktijken voor een CBPeripheral

Vergelijkbaar met de CBCentralManager rol, de CBPeripheral heeft enkele procedures die moeten worden gevolgd om een ​​efficiënte Bluetooth-app te maken.

Met betrekking tot adverteren, onthoud dat wanneer uw app op de voorgrond staat, deze maximaal 28 bytes ruimte in de aanvankelijke advertentiegegevens kan gebruiken. Houd er rekening mee dat u alleen gegevens moet adverteren die er echt toe doen, niet alleen voor prestatieproblemen, maar om het kanaal schoon te houden. Ook moet u de gebruiker een manier bieden om naar wens te adverteren, zodat de gebruiker de frequentie van de advertentie kan bepalen.

Ook wanneer u uw kenmerken configureert, moet u ze inschakelen om meldingen te ondersteunen. Om dit te bereiken, moet u de CBAttributePermissionsReadable eigendom van de toestemmingen in de CBMutableCharacteristic voorwerp.

Let op: aangezien Bluetooth een opkomende technologie is, gebruiken steeds meer apparaten dit en proberen ze het netwerk op te snuiven om toegang te krijgen tot "gratis" gegevens. Daarom moet u altijd een gepaarde verbinding nodig hebben om toegang te krijgen tot de gevoelige gegevens van uw randapparaat.


Conclusie

Na het lezen van deze tutorial, zou u de Core Bluetooth framework-specificaties moeten begrijpen. In de volgende tutorial leer je hoe je een a moet programmeren CBCentralManager en CBPeripheral.

Als u vragen of opmerkingen heeft, laat ze hieronder!