切換語言為:簡體

使用 MultipeerConnectivity 在 iOS 中實現近場無線數據傳輸

  • 爱糖宝
  • 2024-09-20
  • 2043
  • 0
  • 0

MultipeerConnectivity 架構

MultipeerConnectivity 架構主要包括以下幾個關鍵組成部分:

  1. MCPeerID: 表示一個參與者的唯一身份。每個裝置都需要使用一個 MCPeerID 來標識自己。

  2. MCSession: 表示裝置間的會話。會話負責管理連結的裝置,資料的接收和傳送。

  3. MCNearbyServiceAdvertiser: 用於廣播裝置的可發現性。它負責廣告裝置的存在,以便其他裝置可以看到它。

  4. MCNearbyServiceBrowser: 用於查詢附近可用的裝置。它監聽被廣播的服務,並連線到廣告者。

MultipeerConnectivity 的工作流程

  1. 初始化 PeerID: 每個裝置建立一個 MCPeerID。

  2. 建立會話: 使用 MCSession 進行數據傳輸。

  3. 廣告服務: 使用 MCNearbyServiceAdvertiser 來廣告該裝置。

  4. 發現裝置: 使用 MCNearbyServiceBrowser 發現附近的裝置。

  5. 連線和數據傳輸: 透過會話在裝置間傳送和接收資料。

MultipeerConnectivity 使用示例

以下是一個簡單的示例,展示如何使用 MultipeerConnectivity 進行基本的裝置發現和數據傳輸。

Step 1: 匯入框架

首先,在你的 Swift 檔案中匯入 MultipeerConnectivity 框架:

import MultipeerConnectivity

Step 2: 設定 PeerID 和 Session

在你的檢視控制器中,設定 MCPeerID 和 MCSession:

class ViewController: UIViewController, MCSessionDelegate, MCNearbyServiceAdvertiserDelegate, MCNearbyServiceBrowserDelegate {

    var peerID: MCPeerID!
    var session: MCSession!
    var advertiser: MCNearbyServiceAdvertiser!
    var browser: MCNearbyServiceBrowser!

    override func viewDidLoad() {
        super.viewDidLoad()

        peerID = MCPeerID(displayName: UIDevice.current.name)
        session = MCSession(peer: peerID, securityIdentity: nil, encryptionPreference: .required)
        session.delegate = self

        advertiser = MCNearbyServiceAdvertiser(peer: peerID, discoveryInfo: nil, serviceType: "your-service-type")
        advertiser.delegate = self
        advertiser.startAdvertisingPeer()

        browser = MCNearbyServiceBrowser(peer: peerID, serviceType: "your-service-type")
        browser.delegate = self
        browser.startBrowsingForPeers()
    }
}

Step 3: 實現 Delegate 方法

實現必要的 Delegate 方法來處理裝置發現和會話管理:

// MCNearbyServiceAdvertiserDelegate
func advertiser(_ advertiser: MCNearbyServiceAdvertiser, didReceiveInvitationFromPeer peerID: MCPeerID, withContext context: Data?, invitationHandler: @escaping (Bool, MCSession?) -> Void) {
    invitationHandler(true, session)
}

// MCNearbyServiceBrowserDelegate
func browser(_ browser: MCNearbyServiceBrowser, foundPeer peerID: MCPeerID, withDiscoveryInfo info: [String : String]?) {
    browser.invitePeer(peerID, to: session, withContext: nil, timeout: 30)
}

// MCSessionDelegate
func session(_ session: MCSession, peer: MCPeerID, didChange state: MCSessionState) {
    // 處理連線狀態
}

func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) {
    // 處理接收到的資料
}

Step 4: 傳送資料

要傳送資料,可以使用 send(_:toPeers:with:) 方法:

func sendData(_ data: Data) {
    do {
        try session.send(data, toPeers: session.connectedPeers, with: .reliable)
    } catch {
        print("Error sending data: (error.localizedDescription)")
    }
}

Step 5: 處理接收到的資料

didReceive data 方法中,你可以處理接收到的資料:

func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) {
    // 處理接收到的資料,例如將其轉換為字串
    if let message = String(data: data, encoding: .utf8) {
        print("Received message: (message)")
    }
}

總結

MultipeerConnectivity 為開發者提供了一個靈活而強大的解決方案來實現 iOS 裝置間的無線通訊。透過簡單的 API,你可以迅速實現裝置的發現和數據傳輸功能。無論是遊戲、協作工具還是數據傳輸應用,MultipeerConnectivity 都能夠為你的專案帶來便利。希望你能在實際開發中充分利用這個強大的框架!

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.