我有一个应用程序,使用iOS 7的Multipeer Connectivity框架来宣传自己并浏览其他设备。为什么我的MCNearbyServiceBrowser实例会找到自己(运行该应用程序的设备),并调用browser:foundPeer...委托方法?如果我记录实际创建用于开始广告的对等端ID以及在委托方法中发现的对等端ID,则它们具有不同的唯一标识符但相同的显示名称。有任何想法吗?
这是非常普遍的问题,这是由于底层的Bonjour发现服务机制所致。这实际上取决于许多因素,包括重新广播Bonjour可用性的某些网络设备。
在您的应用程序中避免这种情况的最佳方法是为您的MCPeerID使用唯一的字符串(我通常使用新的UUID字符串),并在显示对等方浏览器UI之前检查每个peerID的显示名称与本地名称是否匹配。
在Swift中,它看起来像这样:
let uuid = NSUUID().UUIDString
self.peer = MCPeerID(displayName: uuid)
...
当您从会话委托收到找到对等方的消息时:
如果 peerID.displayName 不等于 self.peer.displayName,则在此处将对等方添加到可用对等方数组中。