MultipeerConnectivity 架構
MultipeerConnectivity 架構主要包括以下幾個關鍵組成部分:
MCPeerID: 表示一個參與者的唯一身份。每個裝置都需要使用一個 MCPeerID 來標識自己。
MCSession: 表示裝置間的會話。會話負責管理連結的裝置,資料的接收和傳送。
MCNearbyServiceAdvertiser: 用於廣播裝置的可發現性。它負責廣告裝置的存在,以便其他裝置可以看到它。
MCNearbyServiceBrowser: 用於查詢附近可用的裝置。它監聽被廣播的服務,並連線到廣告者。
MultipeerConnectivity 的工作流程
初始化 PeerID: 每個裝置建立一個 MCPeerID。
建立會話: 使用 MCSession 進行數據傳輸。
廣告服務: 使用 MCNearbyServiceAdvertiser 來廣告該裝置。
發現裝置: 使用 MCNearbyServiceBrowser 發現附近的裝置。
連線和數據傳輸: 透過會話在裝置間傳送和接收資料。
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 都能夠為你的專案帶來便利。希望你能在實際開發中充分利用這個強大的框架!