最近看了一下藍(lán)牙的方面,整理了一下各方面的資料,加入了些自己的理解。
iOS下Core Bluetooth 框架類之間的關(guān)系圖:

理論知識(shí)必不可少,先插入一些收集到的有用的理論。
1.藍(lán)牙開發(fā)分為中心者模式和管理者模式:a.常用的(其實(shí)99.99%)就是使用中心者模式作為開發(fā),就是我們手機(jī)作為主機(jī),連接藍(lán)牙外設(shè);b.管理者模式,這個(gè)基本用到的比較少,我們手機(jī)自己作為外設(shè),自己創(chuàng)建服務(wù)和特征,然后有其他的設(shè)備連接我們的手機(jī)。
2.服務(wù)(services):藍(lán)牙外設(shè)對(duì)外廣播的必定會(huì)有一個(gè)服務(wù),可能也有多個(gè),服務(wù)下面包含著一些特征,服務(wù)可以理解成一個(gè)模塊的窗口;
3.特征(characteristic):存在于服務(wù)下面的,一個(gè)服務(wù)下面也可以存在多個(gè)特征,特征可以理解成具體實(shí)現(xiàn)功能的窗口,一般特征都會(huì)有value,也就是特征值,特征是與外界交互的最小單位;
4.UUID:可以理解成藍(lán)牙上的唯一標(biāo)識(shí)符(硬件上肯定不是這個(gè)意思,但是這樣理解便于我們開發(fā)),為了區(qū)分不同的服務(wù)和特征,或者給服務(wù)和特征取名字,我們就用UUID來代表服務(wù)和特征。
我把整個(gè)交互流程分為了下面五層,還是喜歡用筆寫。。。先上個(gè)圖吧。。。

從下往上層級(jí)越高,而我們的目的最后要操作的數(shù)據(jù)的讀取和寫入在第五層value上。上面兩層是通用的,下面三層:服務(wù)、特征、數(shù)據(jù)這些你們的硬件工程師會(huì)給你提供相對(duì)應(yīng)的文檔。
整個(gè)流程下來很簡(jiǎn)單,我們主要說下后三層,主要的操作都在后三層。
我們的目的很明確,就是對(duì)最小單元value的讀取或者寫入,從而對(duì)外設(shè)進(jìn)行指令操作。
每一層在iOS的方法中對(duì)應(yīng)的都有一個(gè)關(guān)鍵的類(右側(cè)英文)和若干代理方法,以便我們?cè)谶@一層進(jìn)行操作。
詳細(xì)說一下整個(gè)流程,代碼就不再上了,網(wǎng)上遍地都是。假設(shè)我們已經(jīng)連接到我們的外設(shè)peripheral,我們首先需要拿到我們的外設(shè)(因?yàn)槲覀兊氖謾C(jī)可以連接多個(gè)外設(shè),手環(huán)啊音響啊耳機(jī)啊之類的,所以要判斷出我們自己的外設(shè)拿到它才能繼續(xù)操作)。獲得了外設(shè)之后,我們就可以找尋外設(shè)提供的若干服務(wù)services,這些服務(wù)一般都是協(xié)議好的,你的硬件工程師會(huì)告訴你。找到你需要的服務(wù),遍歷其中的特征characteristic,獲得你需要的特征,它的屬性value就是你需要進(jìn)行讀寫的單元。
上面的每一步走的都是代理方法,當(dāng)然你還需要處理異常的流程,同樣也是對(duì)應(yīng)的若干代理方法。
參考:
https://juejin.im/entry/58f70ecb61ff4b0058111df0
http://www.cocoachina.com/ios/20161021/17813.html