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..
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.
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 volgende afbeelding toont een centraal en een randapparaat:
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.
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.
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.
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:
Als u wilt beginnen met spelen met BTLE-ontwikkeling, moet u rekening houden met de volgende overwegingen:
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.
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:
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.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.
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!