藍牙,WiFi(三)

MultipeerConnectivity拓展

從上一篇博客我們對MultipeerConnectivity的開發,以及藍牙4.0都有了一定的基礎認識。藍牙4.0因爲傳輸速度的原因,所以做了一點便擱置了,主要嘗試的是MultipeerConnectivity的開發,對MultipeerConnectivity簡單做下總結。

MultipeerConnectivity信息交互流程

  1. a設備發送廣播,並在廣播中標記了特定的服務。
  2. b設備搜索附近中有相同特定服務的廣播,然後發送連接請求。
  3. a設備收到b發送過來的請求,同意之後,會把b的一些基本信息保存在a中的會話session中
  4. b也會保存一些a的必要信息在b的會話session中,也就是說a和b都有自己連接的藍牙的session信息,兩個session是獨立存在的
  5. a或b發送信息時選擇自己session中連接的藍牙peerID,進行發送,另外一端在時刻監聽着會話代理- (void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID中是否有接收數據。

自定義MultipeerConnectivity的Demo概要

利用系統自帶的廣播搜索連接,無法自定義搜索到的UI界面,而且對於連接請求需要手動點擊確認。蘋果sdk有提供自定義方法,sdk內容不多,可以自行查看。MultipeerConnectivitySDK

MultipeerConnectivitySDK概要

如截圖所示,現在我們就來做一個自動搜索附近藍牙設備,並自動連接的demo,可實現消息發送給指定的人。從sdk可知,若想實現自動連接附近藍牙或斷開需要用到MCNearbyServiceAdvertiserMCNearbyServiceBrowser,關鍵內容如下:

  1. a設備既要發送廣播又要搜索廣播,即同時做以上a和b設備都要做的事,也就是說a類裏同時有發送廣播讓別人搜索到進行連接的session,也有搜索別人的廣播進行連接的session。兩個session互不干擾。
  2. 多個設備進行連接,將消息通過中間連接的藍牙中轉設備發送給指定的人。
  3. 根據接收到的不同消息類型進行不同的處理。demo效果如下
    demo效果

MultipeerConnectivity代碼詳解

代碼詳解,因爲這個博客工具還不太會用,所以暫且先用截圖來展示代碼,源代碼下載見最底部

  1. 初始化,你需要兩個會話session,一個用來保存自己連接的別人的廣播,一個用來保存別人連接了你的廣播。
    初始化

  2. 點擊“開始”開啓廣播並同時搜索附近的廣播服務
    開始廣播並搜索

  3. 當搜索到附近有對應的廣播時會調用代理進行連接
    這裏寫圖片描述

  4. 連接開始或斷開等,session的狀態會發生改變,調用代理- (void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state
    session狀態改變

  5. 因爲你在搜索附近廣播的同時也在向附近發送着廣播,所以一旦有附近的藍牙進行連接請求的時候會調用廣播代理- (void) advertiser:(MCNearbyServiceAdvertiser )advertiser didReceiveInvitationFromPeer:(MCPeerID )peerID
    withContext:(nullable NSData *)context
    是否接受邀請

  6. 這裏注意一個app的bug,當使用MCNearbyServiceAdvertiser時,一定要調用代理- (void) session:(MCSession *)session
    didReceiveCertificate:(nullable NSArray *)certificate
    fromPeer:(MCPeerID *)peerID
    certificateHandler:(void (^)(BOOL accept))certificateHandler,在block中返回yes。
    返回證書

    連接完成,發送數據就是比較簡單的了,用發送文字進行舉例,demo只進行了發送給全部的我正在連接的session中的所有設備,需要調試者可自行修改

  7. 發送文字
    發送文字

  8. 接收數據,需要特別注意因爲消息的發送是異步,所以此方法沒有在主線程中,爲防止ui處理報錯,所以切換爲主線程!!!!!
    接收數據

源碼下載

源碼下載

發佈了14 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章