Il framework Core Bluetooth (CB) fornisce le risorse necessarie per le app iOS per comunicare con dispositivi dotati della tecnologia Bluetooth Low Energy (BTLE). Questo tutorial ti guiderà attraverso l'evoluzione di CB da iOS 5 a iOS 7. Inoltre, imparerai come configurare una centrale Bluetooth centrale e periferica, come comunicare tra loro e alcune migliori pratiche di programmazione.
I tutorial Core Bluetooth sono divisi in due sezioni. Il primo copre l'aspetto teorico di Core Bluetooth, mentre il secondo serve come una lezione pratica completa. Qui troverai il codice sorgente completo per il tutorial pratico, oltre a un ulteriore progetto iniziale.
BTLE è basato sulla specifica Bluetooth 4.0, che tra le altre cose definisce un insieme di protocolli per la comunicazione tra dispositivi a bassa energia. In BTLE ci sono due profili:
L'immagine seguente mostra un dispositivo centrale e uno periferico:
Ogni "profilo" rappresenta un oggetto iOS equivalente, vale a dire il CBCentralManager
e il CBPeripheral
.
Come affermato in precedenza, il CBCentralManager
gestisce dispositivi periferici scoperti o connessi (CBPeripheral
). Appena il CBCentralManager
si connette a una periferica, inizia l'interazione con i suoi dati. I dati memorizzati nelle periferiche sono organizzati in un albero gerarchico in base ai suoi servizi e caratteristiche.
Questi servizi possono essere Servizio di notifica degli avvisi
, Pressione sanguigna
, Frequenza cardiaca
, ecc. L'elenco ufficiale di GATT
le specifiche dei servizi sono disponibili in questa pagina.
La caratteristica di un servizio nella pratica è il valore del servizio. In questo tutorial, il Pressione sanguigna
il servizio è il valore della pressione sanguigna in un momento specifico. La figura successiva illustra una periferica personalizzata con un servizio e due caratteristiche.
In Core Bluetooth, i servizi di una periferica remota sono rappresentati da CBService
oggetti. Allo stesso modo, le caratteristiche di un servizio di periferiche remote sono rappresentate da CBCharacteristic
oggetti. La figura seguente illustra la struttura gerarchica di a CBService
periferica.
Una determinata periferica può avere più servizi e più caratteristiche per ogni servizio. Non esiste un numero limite specifico per ognuno.
Nota che dovresti leggere e imparare il riferimento ufficiale del Core Bluetooth per ottenere una comprensione completa di questa tecnologia.
Il Core Bluetooth Framework è apparso su iOS 5 e ha introdotto un nuovo modo di comunicare tra dispositivi utilizzando la tecnologia wireless Bluetooth. Durante ogni versione iOS, Apple migliora e aggiunge nuove funzionalità a Core Bluetooth.
In iOS 5, le principali funzionalità Bluetooth principali erano CBCentralManager
, CBPeripheral
, Centrale, Cliente e Osservatore. In questa versione esistevano solo due classi, la CBCentralManager
e CBPeripheral
. La prima classe è stata progettata per scoprire e connettersi a diverse periferiche (limitate). La seconda classe era responsabile della visualizzazione di un dispositivo e creava un meccanismo che consentiva alla Centrale di accedere ai dati disponibili sui servizi remoti.
In iOS 6, Apple ha introdotto diverse funzionalità e miglioramenti del Core Bluetooth inclusi CBPeripheralManager
, Cache, broadcaster, periferiche e server del database periferico. La caratteristica principale era il server
ruolo. Permetteva agli sviluppatori di creare e specificare servizi personalizzati. Inoltre, il CBPeripheralManager
ha introdotto un modo personalizzato per creare servizi e meccanismi che definiscono il modo in cui le informazioni sono pubblicizzate sulla rete. Inoltre, il caching dei database periferici ha notevolmente migliorato le prestazioni generali di Bluetooth (soprattutto nella fase di scoperta).
Dopo alcuni anni di raccolta di feedback, Apple ha perfezionato il framework Bluetooth in iOS 7 con le seguenti funzionalità:
Se vuoi iniziare a giocare con lo sviluppo BTLE, devi tenere a mente le seguenti considerazioni:
Definire come un'app reagisce a uno stato di sfondo o in primo piano è cruciale. Ogni app deve comportarsi in modo diverso in background e in primo piano perché le risorse di sistema sono limitate. Per impostazione predefinita, molte delle attività CB comuni (sia sulla centrale che sulla periferica) sono disabilitate mentre l'app è in background o in uno stato sospeso. Tuttavia, puoi dichiarare che la tua app supporta le modalità di esecuzione dello sfondo del Core Bluetooth per consentirne il risveglio da uno stato sospeso per elaborare determinati eventi.
Nota che anche se la tua app supporta una o entrambe le modalità di esecuzione dello sfondo CB, non può essere eseguita per sempre. A un certo punto, il sistema potrebbe dover terminare la tua app per liberare memoria per l'attuale app in primo piano perché iOS è sovrana nella gestione della memoria. Ciononostante, Core Bluetooth supporta il salvataggio delle informazioni di stato per gli oggetti gestore centrale e periferico e il ripristino dello stato al momento dell'avvio dell'app.
Se la tua app non supporta le attività in background, tutti gli eventi Bluetooth che si verificano quando l'app è in uno stato sospeso vengono accodati dal sistema e attivati nell'app quando si tratta dello stato in primo piano. Questi avvisi possono essere definiti quando si chiama il connectPeripheral: opzioni:
metodo del CBCentralManager
classe quando viene effettuata una connessione alla periferica. Esistono tre tipi di avvisi:
CBConnectPeripheralOptionNotifyOnConnectionKey
quando si desidera che il sistema visualizzi un avviso per una determinata periferica se l'app viene sospesa quando viene stabilita una connessione corretta.CBConnectPeripheralOptionNotifyOnDisconnectionKey
quando si desidera che il sistema visualizzi un avviso di disconnessione per una determinata periferica se l'app è sospesa al momento della disconnessione.CBConnectPeripheralOptionNotifyOnNotificationKey
quando si desidera che il sistema visualizzi un avviso per tutte le notifiche ricevute da una determinata periferica se l'app è sospesa al momento.D'altra parte, se l'applicazione supporta la modalità background è necessario dichiararla (UIBackgroundModes
) nel file lista proprietà (Info.plist). Quando la tua app lo dichiara, il sistema lo riattiva da uno stato sospeso per consentirgli di gestire gli eventi Bluetooth. Questo supporto è importante per le app che interagiscono con dispositivi Bluetooth Low Energy che forniscono dati a intervalli regolari, ad esempio un cardiofrequenzimetro. Esistono due ruoli in background: uno per i dispositivi centrali e uno per le periferiche.
CBCentralManager
Nonostante il fatto che il framework Bluetooth Core renda trasparenti molte delle transazioni centrali alla tua app, ci sono diverse opzioni da considerare quando si sviluppa un'app Bluetooth. Poiché hai a che fare con dispositivi a bassa energia, dovresti ricordare che ogni operazione consuma energia dal tuo dispositivo Bluetooth.
Pertanto, è necessario prendere in considerazione quanto segue:
scanForPeripheralsWithServices: per mangiare:
metodo per prevenire questo, in modo che tutti gli annunci pubblicitari di un dispositivo specifico vengano considerati come uno. Tuttavia, puoi usare il CBCentralManagerScanOptionAllowDuplicatesKey
opzione se si desidera ricevere più annunci dallo stesso dispositivo.CBPeripheral
Simile al CBCentralManager
ruolo, il CBPeripheral
ha alcune pratiche che dovrebbero essere seguite al fine di creare un'app Bluetooth efficiente.
Per quanto riguarda la pubblicità, ricorda che quando la tua app è in primo piano può utilizzare fino a 28 byte di spazio nei dati della pubblicità iniziale. Tieni presente che devi solo pubblicizzare i dati che contano davvero, non solo per i problemi di rendimento, ma per mantenere pulito il canale. Inoltre, dovresti offrire all'utente un modo per fare pubblicità come desiderato, in modo che l'utente abbia un modo per controllare la frequenza dell'annuncio.
Inoltre, quando configuri le tue caratteristiche, devi abilitarle a supportare le notifiche. Per ottenere questo, è necessario aggiungere il CBAttributePermissionsReadable
proprietà al permessi
nel CBMutableCharacteristic
oggetto.
Sappi che dal momento che il Bluetooth è una tecnologia emergente, sempre più dispositivi lo usano e cercano di annusare la rete per accedere ai dati "liberi". Per questo motivo, devi sempre richiedere una connessione accoppiata per accedere ai dati sensibili della tua periferica.
Dopo aver letto questo tutorial, è necessario comprendere le specifiche della struttura Core Bluetooth. Nel prossimo tutorial imparerai come programmare a CBCentralManager
e CBPeripheral
.
Se avete domande o commenti, per favore lasciateli qui sotto!