iOS 7 SDK Core Bluetooth - Panoramica teorica

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.


introduzione

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.


1. Contesto

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:

  • Il centrale: tipicamente definisce la logica dietro una comunicazione CB. È in grado di scansionare, connettere e disconnettere le periferiche. Inoltre, consuma le informazioni disponibili su ciascuna periferica.
  • Periferica: un dispositivo che ha informazioni importanti da condividere (frequenza cardiaca, temperatura, ecc.). Le informazioni possono essere spinte o pubblicizzate via etere.

L'immagine seguente mostra un dispositivo centrale e uno periferico:


Illustrazione di dispositivi centrali e periferici.

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.


Illustrazione di 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.


Illustrazione di servizi periferici.

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.


2. Core Bluetooth Evolution

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à:

  • Gestione dei dispositivi più semplice
  • Periferiche più intelligenti
  • Miglioramenti delle prestazioni
  • Persistenza dell'applicazione
  • Servizi integrati
  • Conservazione e restauro dello stato
  • Il caching del database si è evoluto e ora supporta servizi, caratteristiche e descrittori (in precedenza solo servizi e caratteristiche memorizzati).
  • Per l'invio di dati, anche la quantità di dati trasmessi è cambiata. Ora è possibile supportare le richieste di scambio MTU e modificare la quantità massima di dati per PDU.
  • iBeacon è una tecnologia che consente agli utenti di verificare la posizione e la prossimità di un dispositivo specifico e del dispositivo iOS dell'utente.
  • Il servizio di notifica di Apple (ANCS) è un servizio GATT specifico di Apple che espone le caratteristiche necessarie per gli accessori da avvisare di eventuali eventi di notifica sul dispositivo iOS (notifiche in arrivo, modificate o ignorate) e per ottenere maggiori informazioni su tali eventi . Attraverso questo servizio, gli sviluppatori di accessori esterni hanno pieno accesso agli eventi del dispositivo. Tuttavia, la versione corrente supporta solo la lettura dei dati di notifica.

Se vuoi iniziare a giocare con lo sviluppo BTLE, devi tenere a mente le seguenti considerazioni:

  • Si noti che Apple sta riducendo il supporto del simulatore iOS per Core Bluetooth. Pertanto, il modo migliore per testare il codice è eseguirlo direttamente su un dispositivo iOS.
  • È necessario un dispositivo iOS con supporto hardware per Bluetooth 4.0. Tutti i dispositivi rilasciati da iPhone 4S (incluso il 4S) supportano Bluetooth 4.0.
  • La tua app può parlare con una periferica BTLE (può essere un secondo dispositivo iOS o un Mac).

3. Elaborazione in background dei CB

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.


4. Best practice per a 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:

  • Scansione del dispositivo: si dovrebbe solo cercare nuovi dispositivi quando assolutamente necessario. Ridurre al minimo l'utilizzo della radio è particolarmente importante quando si sviluppa un dispositivo iOS poiché l'utilizzo della radio ha un effetto negativo sulla durata della batteria di un dispositivo iOS.
  • Più pubblicità dallo stesso dispositivo: i dispositivi periferici remoti possono inviare più pacchetti pubblicitari al secondo per annunciare la loro presenza ai centri di ascolto. Quindi, puoi usare il 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.
  • Estrai saggiamente i dati della periferica. Un dispositivo periferico può avere molti servizi e caratteristiche di quelli a cui sei interessato. Dovresti cercare e scoprire solo i servizi e le caratteristiche di cui la tua app ha bisogno.
  • Iscriviti o controlla i valori delle caratteristiche. È possibile recuperare le caratteristiche utilizzando l'input dell'utente o eseguendolo automaticamente quando tale caratteristica cambia. Dovresti usare un metodo di conseguenza.
  • Ogni volta che sai che una connessione non è necessaria, dovresti terminarla. Grazie ai meccanismi di memorizzazione nella cache è possibile riconnettersi rapidamente. Apple ha un flusso di lavoro specifico quando una centrale tenta di riconnettersi a un dispositivo. L'immagine successiva dimostra che il flusso di lavoro:

Illustrazione del flusso di lavoro di riconnessione di Apple.

5. Best practice per a 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.


Conclusione

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!