iOS 7 SDK Core Bluetooth - Prezentare teoretică

Cadrul de bază Bluetooth (CB) furnizează resursele necesare pentru ca aplicațiile iOS să poată comunica cu dispozitivele echipate cu tehnologia Bluetooth cu energie redusă (BTLE). Acest tutorial vă va ghida prin evoluția CB de la iOS 5 la iOS 7. În plus, veți învăța cum să configurați o centrală Bluetooth centrală și periferică, cum să comunicați între ele și unele bune practici de programare.


Introducere

Core tutorialele Bluetooth sunt împărțite în două secțiuni. Primul acoperă aspectul teoretic al tehnologiei Bluetooth Core, în timp ce al doilea servește ca o lecție practică completă. Aici veți găsi codul sursă complet pentru tutorialul practic, plus un proiect de pornire suplimentar.


1. Fundal

BTLE se bazează pe specificația Bluetooth 4.0, care, printre altele, definește un set de protocoale pentru comunicarea între dispozitivele cu consum redus de energie. În BTLE există două profiluri:

  • Centrala: definește de obicei logica din spatele unei comunicații CB. Este capabil să scaneze, să conecteze și să deconecteze perifericele. În plus, consumă informațiile disponibile la fiecare periferic.
  • Periferic: un dispozitiv care are informații importante de împărtășire (frecvența cardiacă, temperatura, etc). Informațiile pot fi împinse sau publicate în aer.

Următoarea imagine prezintă un dispozitiv central și unul periferic:


Ilustrație a dispozitivelor centrale și periferice.

Fiecare "profil" reprezintă un obiect iOS echivalent, și anume CBCentralManager si CBPeripheral.

După cum sa afirmat anterior, CBCentralManager gestionează dispozitive periferice descoperite sau conectate la distanță (CBPeripheral). De îndată ce CBCentralManager se conectează la o periferică, interacțiunea cu datele sale începe. Datele stocate în periferice sunt organizate într-un arbore ierarhic bazat pe serviciile și caracteristicile sale.

Aceste servicii pot fi Alert Service Notification, Tensiune arteriala, Ritm cardiac, etc lista oficială a GATT specificațiile de servicii pot fi găsite pe această pagină.

Caracteristica unui serviciu în practică este valoarea serviciului. În acest tutorial, Tensiune arteriala serviciul este valoarea tensiunii arteriale la un anumit moment. Următoarea figură ilustrează un periferic personalizat, cu un serviciu și două caracteristici.


Ilustrație a unui periferic personalizat cu un serviciu și două caracteristici.

În Core Bluetooth, sunt reprezentate serviciile unei periferice la distanță CBService obiecte. În mod similar, sunt reprezentate caracteristicile unui serviciu periferic la distanță CBCharacteristic obiecte. Următoarea figură ilustrează structura ierarhică a CBService periferic.


Ilustrarea unui serviciu periferic.

Un periferic dat poate avea mai multe servicii și caracteristici multiple pentru fiecare serviciu. Nu există un număr de limită specific pentru fiecare dintre acestea.

Rețineți că trebuie să citiți și să învățați referința oficială Core Bluetooth Framework Reference pentru a obține o înțelegere completă a acestei tehnologii.


2. Evoluția Bluetooth centrală

Core Bluetooth Framework a apărut în iOS 5 și a introdus o nouă modalitate de comunicare între dispozitivele care utilizează tehnologia fără fir Bluetooth. În timpul fiecărei versiuni de iOS, Apple îmbunătățește și adaugă noi caracteristici la Core Bluetooth.

În iOS 5, principalele caracteristici Core Bluetooth au fost CBCentralManager, CBPeripheral, Central, Client și Observator. În această versiune au existat doar două clase: CBCentralManager și CBPeripheral. Prima clasă a fost concepută pentru a descoperi și conecta mai multe periferice (limitate). A doua clasă a fost responsabilă de vizualizarea unui dispozitiv și a creat un mecanism care a permis centrului să acceseze datele disponibile pentru serviciile de la distanță.

În iOS 6, Apple a introdus mai multe caracteristici și îmbunătățiri Core Bluetooth, inclusiv CBPeripheralManager, Baze de date cache pentru baze de date periferice, radiodifuzor, periferic și server. Principala caracteristică a fost Server rol. A permis dezvoltatorilor să creeze și să specifice servicii personalizate. In plus CBPeripheralManager a introdus o modalitate personalizată de a crea servicii și mecanisme care să definească modul în care sunt promovate informațiile în rețea. În plus, cache-ul bazei de date periferice a îmbunătățit foarte mult performanța generală Bluetooth (mai ales în faza de descoperire).

După câțiva ani de colectare de feedback, Apple a îmbunătățit cadrul Bluetooth în iOS 7 cu următoarele caracteristici:

  • Gestionarea mai simplă a dispozitivelor
  • Periferice inteligente
  • Imbunatatiri ale performantei
  • Aplicarea persistenței
  • Servicii încorporate
  • Conservarea și restaurarea statului
  • Caching-ul bazelor de date a evoluat și suportă acum servicii, caracteristici și descriptori (anterior, numai servicii și caracteristici stocate).
  • Pentru trimiterea datelor, cantitatea de date transmise a fost, de asemenea, schimbată. Acum este posibil să se accepte cererile de schimb MTU și să se modifice cantitatea maximă de date per PDU.
  • iBeacon este o tehnologie care permite utilizatorilor să verifice locația și proximitatea unui dispozitiv specific și a dispozitivului iOS al utilizatorului.
  • Serviciul de centre de notificare din cadrul Apple (ANCS) este un serviciu GATT specific Apple care expune caracteristicile necesare pentru ca alertele să fie avertizate pentru eventualele evenimente de notificare de pe dispozitivul iOS (notificările care sosesc, sunt modificate sau respinse) și pentru a obține mai multe informații despre acele evenimente . Prin intermediul acestui serviciu, dezvoltatorii accesori externi au acces complet la evenimentele dispozitivelor. Cu toate acestea, versiunea curentă suportă doar citirea datelor de notificare.

Dacă doriți să începeți să jucați cu dezvoltarea BTLE, trebuie să aveți în vedere următoarele considerații:

  • Rețineți că Apple scade suportul pentru simulatoarele iOS pentru Core Bluetooth. Astfel, cel mai bun mod de a testa codul este să îl rulați direct pe un dispozitiv iOS.
  • Aveți nevoie de un dispozitiv iOS cu suport hardware pentru Bluetooth 4.0. Toate dispozitivele lansate de la iPhone 4S (inclusiv 4S) suportă Bluetooth 4.0.
  • Aplicația dvs. poate vorbi cu un periferic BTLE (acesta poate fi un al doilea dispozitiv iOS sau un Mac).

3. Prelucrarea fundalului CB

Definirea modului în care o aplicație reacționează la o stare de fundal sau la un popas este crucială. Fiecare aplicație trebuie să se comporte diferit atât în ​​fundal, cât și în prim-plan, deoarece resursele sistemului sunt limitate. În mod implicit, multe dintre sarcinile comune ale CB (atât pe bază centrală, cât și periferică) sunt dezactivate în timp ce aplicația se află în fundal sau într-o stare suspendată. Cu toate acestea, puteți declara aplicația dvs. să accepte modurile principale de execuție a fundalului Bluetooth pentru a permite trecerea acesteia din starea suspendată pentru a procesa anumite evenimente.

Rețineți că, chiar dacă aplicația dvs. acceptă unul sau ambele moduri de execuție a fundalului CB, nu poate funcționa pentru totdeauna. Într-un anumit moment, este posibil ca sistemul să trebuiască să vă închidă aplicația pentru a elibera memoria pentru aplicația curentă din prim-plan, deoarece iOS este suveran în gestionarea memoriei. Cu toate acestea, Core Bluetooth suportă salvarea informațiilor de stare pentru obiectele managerului central și periferic și restaurarea acelei stări la ora de lansare a aplicației.

Dacă aplicația dvs. nu acceptă activități de fundal, toate evenimentele Bluetooth care apar atunci când aplicația se află într-o stare suspendată sunt plasate în așteptare de către sistem și lansate în aplicație atunci când este vorba despre starea pop-la-stânga. Aceste alerte pot fi definite atunci când sunați connectPeripheral: opțiuni: metodă a CBCentralManager atunci când se face o conexiune la periferic. Există trei tipuri de alerte:

  • CBConnectPeripheralOptionNotifyOnConnectionKey când doriți ca sistemul să afișeze o avertizare pentru un anumit periferic dacă aplicația este suspendată atunci când se realizează o conexiune de succes.
  • CBConnectPeripheralOptionNotifyOnDisconnectionKey când doriți ca sistemul să afișeze o avertizare de deconectare pentru o anumită periferică dacă aplicația este suspendată în momentul deconectării.
  • CBConnectPeripheralOptionNotifyOnNotificationKey când doriți ca sistemul să afișeze o alertă pentru toate notificările primite de la un anumit dispozitiv periferic dacă aplicația este suspendată în acel moment.

Pe de altă parte, dacă aplicația dvs. acceptă modul de fundal, trebuie să o declarați (UIBackgroundModes) din fișierul cu lista de proprietăți (Info.plist). Când aplicația dvs. declară acest lucru, sistemul se trezește din starea suspendată pentru a permite gestionarea evenimentelor Bluetooth. Acest suport este important pentru aplicațiile care interacționează cu dispozitive Bluetooth cu consum redus de energie care furnizează date la intervale regulate, cum ar fi un monitor de frecvență cardiacă. Există două roluri de fundal: una pentru dispozitivele centrale și una pentru periferice.


4. Cele mai bune practici pentru a CBCentralManager

În ciuda faptului că cadrul central Bluetooth face multe dintre tranzacțiile centrale transparente pentru aplicația dvs., există mai multe opțiuni pe care trebuie să le luați în considerare la dezvoltarea unei aplicații Bluetooth. Deoarece aveți de-a face cu dispozitive cu consum redus de energie, trebuie să vă amintiți că fiecare operațiune scade energia de la dispozitivul dvs. Bluetooth.

Prin urmare, trebuie să țineți cont de următoarele:

  • Scanarea dispozitivului: ar trebui să scanați numai dispozitive noi atunci când este absolut necesar. Minimizarea utilizării radioului este deosebit de importantă atunci când dezvoltați un dispozitiv iOS, deoarece utilizarea radioului are un efect negativ asupra oricărei durate de viață a bateriei dispozitivului iOS.
  • Anunțuri multiple de pe același dispozitiv: dispozitivele periferice de la distanță pot trimite pachete de reclame multiple pe secundă pentru a-și anunța prezența în centrele de ascultare. Astfel, puteți folosi scanForPeripheralsWithServices: Opțiuni: metodă pentru a preveni acest lucru, astfel încât toate reclamele de la un dispozitiv specific sunt tratate ca unul. Cu toate acestea, puteți utiliza CBCentralManagerScanOptionAllowDuplicatesKey dacă doriți să primiți mai multe anunțuri de pe același dispozitiv.
  • Extrageți cu înțelepciune datele periferice. Un dispozitiv periferic poate avea multe servicii și caracteristici decât vă interesează. Ar trebui să căutați și să descoperiți numai serviciile și caracteristicile pe care trebuie să le aibă aplicația.
  • Abordați sau verificați valorile caracteristicilor. Puteți recupera caracteristicile utilizând intrarea utilizatorului sau efectuând acest lucru automat atunci când acea caracteristică se schimbă. Ar trebui să utilizați o metodă în consecință.
  • De fiecare dată când știi că nu este nevoie de o conexiune, ar trebui să o terminați. Datorită mecanismelor de memorare a cache-ului se poate reconecta rapid. Apple are un flux de lucru specific atunci când o centrală încearcă să se reconecteze la un dispozitiv. Următoarea imagine demonstrează că fluxul de lucru:

Ilustrație a fluxului de lucru pentru reconectarea Apple.

5. Cele mai bune practici pentru a CBPeripheral

Similar cu CBCentralManager rol, CBPeripheral are câteva practici care ar trebui urmate pentru a crea o aplicație Bluetooth eficientă.

În ceea ce privește publicitatea, rețineți că atunci când aplicația dvs. se află în prim plan, aceasta poate utiliza până la 28 de octeți de spațiu în datele de publicitate inițiale. Fiți conștienți de faptul că trebuie doar să faceți publicitate datelor care contează, nu numai pentru problemele legate de performanță, ci și pentru a menține canalul curat. De asemenea, ar trebui să oferiți utilizatorului o modalitate de a face publicitate așa cum doriți, astfel încât utilizatorul să aibă o modalitate de a controla frecvența publicității.

De asemenea, atunci când vă configurați caracteristicile, trebuie să le activați pentru a accepta notificările. Pentru a realiza acest lucru, trebuie să adăugați CBAttributePermissionsReadable proprietate la permisiuni în CBMutableCharacteristic obiect.

Fiți conștienți de faptul că, deoarece tehnologia Bluetooth este o tehnologie emergentă, tot mai multe dispozitive o folosesc și încearcă să smulgă rețeaua pentru a accesa datele "gratuite". Din această cauză, trebuie să aveți întotdeauna nevoie de o conexiune asociată pentru a accesa datele sensibile ale dispozitivului dvs. periferic.


Concluzie

După ce ați citit acest tutorial, trebuie să înțelegeți specificațiile de bază pentru tehnologia Bluetooth. În următorul tutorial, veți afla cum să programați a CBCentralManager și CBPeripheral.

Dacă aveți întrebări sau comentarii, lăsați-le mai jos!

Cod