iOS中提供了4個框架用於實現藍牙鏈接網絡
GameKit.framework(用法簡單)session
只能用於iOS設備之間的鏈接,多用於遊戲(好比五子棋對戰),從iOS7開始過時框架
MultipeerConnectivity.framework性能
只能用於iOS設備之間的鏈接,從iOS7開始引入,主要用於文件共享(僅限於沙盒的文件)測試
ExternalAccessory.framework代理
可用於第三方藍牙設備交互,可是藍牙設備必須通過蘋果MFi認證(國內較少)調試
CoreBluetooth.framework(時下熱門)code
可用於第三方藍牙設備交互,必需要支持藍牙4.0遊戲
硬件至少是4s,系統至少是iOS6ip
藍牙4.0以低功耗著稱,通常也叫BLE(Bluetooth Low Energy)
目前應用比較多的案例:運動手壞、嵌入式設備、智能家居
GameKit框架簡介
使用GameKit框架,能夠在遊戲中增長對等鏈接,又稱對端鏈接或點對點鏈接,Peer To Peer。
使用GameKit框架中的對等網絡鏈接API,能夠在遊戲玩家之間創建一個對等網絡,並在遊戲/應用實例之間交換數據。
GameKit框架可使用藍牙在玩家之間建立網絡,玩家甚至不須要鏈接到互聯網,就能夠彼此對戰。
經過藍牙實現對等網絡鏈接
爲玩家雙方呈現一個GKPeerPickerController,提供了一個標準的用戶界面鏈接兩臺設備
ViewControoler遵循GKPeerPickerControllerDelegate協議,處理來自GKPeerPickerController(對端選擇器)的信息
創建鏈接後,使用GKSession類能夠向對端設備發送數據
在receiveData:fromPeer:inSession:context代理方法中編寫代碼來處理接收到的數據
藍牙對等網絡演練——發送照片(1)
演練目標:經過藍牙彼此發送照片
演練步驟:
1. 基於照片選擇項目進行擴展,僅從照片庫選擇照片
2. 添加GameKit框架
3. 建立對等鏈接
3.1 實例化對端選擇器
3.2 設置代理,並遵循協議
3.3 顯示對端選擇器
4. 鏈接創建代理方法
peerPickerController:didConnectPeer:toSession:
4.1記錄對端鏈接會話
4.2 設置數據接收處理
4.3 關閉對端選擇器
GameKit的藍牙開發步驟
顯示能夠鏈接的藍牙設備列表
GKPeerPickerController *ppc = [[GKPeerPickerController alloc] init];
ppc.delegate = self;
[ppc show];
在代理方法中監控藍牙的鏈接
- (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session {
NSLog(@"鏈接到設備:%@", peerID);
// 關閉藍牙設備顯示界面
[picker dismiss];
// 設置接收到藍牙數據後的監聽器
[session setDataReceiveHandler:self withContext:nil];
// 保存session
self.session = session;
}
GameKit的藍牙開發步驟
處理接收到的藍牙數據
- (void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context {
}
利用GKSession給其餘設備發送數據
給指定的鏈接設備發送數據
- (BOOL)sendData:(NSData *) data toPeers:(NSArray *)peers withDataMode:(GKSendDataMode)mode error:(NSError **)error;
給全部鏈接的設備發送數據
- (BOOL)sendDataToAllPeers:(NSData *) data withDataMode:(GKSendDataMode)mode error:(NSError **)error;
GameKit的藍牙開發注意
只能用於iOS設備之間的鏈接
只能用於同一個應用程序之間的鏈接
最好別利用藍牙發送比較大的數據
Core Bluetooth
Core Bluetooth測試比較麻煩,正常狀況下,得至少有2臺真實的藍牙4.0設備
如何讓iOS模擬器也能測試藍牙4.0程序?
買一個CSR藍牙4.0 USB適配器,插在Mac上
在終端輸入sudo nvram bluetoothHostControllerSwitchBehavior="never"
重啓Mac
用Xcode 4.6調試代碼,將程序跑在iOS 6.1的模擬器上
(蘋果把iOS 7.0模擬器對BLE的支持移除掉了)
Core Bluetooth的使用場景
運動手環、智能家居、嵌入式設備等等(金融刷卡器、心電測量器)
Core Bluetooth的基本常識
每一個藍牙4.0設備都是經過服務(Service)和特徵(Characteristic)來展現本身的
一個設備必然包含一個或多個服務,每一個服務下面又包含若干個特徵
特徵是與外界交互的最小單位
好比說,一臺藍牙4.0設備,用特徵A來描述本身的出廠信息,用特徵B來收發數據
服務和特徵都是用UUID來惟一標識的,經過UUID就能區別不一樣的服務和特徵
設備裏面各個服務(service)和特徵(characteristic)的功能,均由藍牙設備硬件廠商提供,好比哪些是用來交互(讀寫),哪些可獲取模塊信息(只讀)等
Core Bluetooth的開發步驟
創建中心設備
掃描外設(Discover Peripheral)
鏈接外設(Connect Peripheral)
掃描外設中的服務和特徵(Discover Services And Characteristics)
利用特徵與外設作數據交互(Explore And Interact)
斷開鏈接(Disconnect)
藍牙的現狀
絕大多數智能手機支持藍牙 4.0(BLE)
藍牙芯片發展迅速,在性能和效率方面都有很大提升,且不斷變得更小更便宜
iBeacon + 藍牙,前景一片光明
應用之一:室內導航
Estimote公司爲iBeacon提供基站
3個iBeacon基站的預購價格爲99美圓(約合人民幣610元)
Estimote公司推出的iBeacon基站的最遠傳輸距離爲50m,可是他們推薦在10m範圍內的使用效果最好
一塊鈕釦電池就能爲一個iBeacon基站提供長達 2 年的使用壽命,並且是在設備不斷對外發射信號的狀況下