我的代码如下,我的目标是让mac识别具有Multipeer Connectivity的iOS设备。这在大多数情况下都有效,除了当我运行这两个时,我得到两个“FOUND !!!”在控制台中。我该如何解决这个问题?
以下是我的iOS设备代码:
import MultipeerConnectivity
class ConnectionsManager: NSObject, MCNearbyServiceBrowserDelegate, MCNearbyServiceAdvertiserDelegate {
let browser : MCNearbyServiceBrowser
let advertiser: MCNearbyServiceAdvertiser
let peerID = MCPeerID(displayName: "macDevice")
override init() {
advertiser = MCNearbyServiceAdvertiser(peer: MCPeerID(displayName: "mac Device"), discoveryInfo: nil, serviceType: "example-test")
browser = MCNearbyServiceBrowser(peer: MCPeerID(displayName: "mac Device"), serviceType: "example-test")
super.init()
advertiser.delegate = self
advertiser.startAdvertisingPeer()
browser.delegate = self
browser.startBrowsingForPeers()
}
deinit {
browser.stopBrowsingForPeers()
advertiser.stopAdvertisingPeer()
}
func browser(_ browser: MCNearbyServiceBrowser, lostPeer peerID: MCPeerID) {
}
func browser(_ browser: MCNearbyServiceBrowser, didNotStartBrowsingForPeers error: Error) {
}
func browser(_ browser: MCNearbyServiceBrowser, foundPeer peerID: MCPeerID, withDiscoveryInfo info: [String : String]?) {
print("FOUND!!!")
}
func advertiser(_ advertiser: MCNearbyServiceAdvertiser, didNotStartAdvertisingPeer error: Error) {
}
func advertiser(_ advertiser: MCNearbyServiceAdvertiser, didReceiveInvitationFromPeer peerID: MCPeerID, withContext context: Data?, invitationHandler: @escaping (Bool, MCSession?) -> Void) {
}
}
对于mac:
dblclick
谢谢,
答案 0 :(得分:5)
这种情况正在发生,因为设计将其可用性宣传给其他设备。
每当外围设备准备好进行通信时,他们就会在数据包中发送该信息,这称为广告。基于广告数据设计可以在发现时返回附加数据。
如果外围设备支持主动扫描且应用程序位于前台,则您将获得两次调用到didDiscoverPeripheral。第一个呼叫包含来自外围设备的广告包中的数据。第二个调用包含来自外设的扫描响应数据包的附加数据。
有关结帐this thread的更多信息。
如何解决此问题?您可以保留您收到的ID列表,并丢弃您为该特定对等ID获得的任何其他发现呼叫。
的更多信息,请查看蓝牙文档