iOS Multipeer Connectivity问题......
我的应用使用MCNearbyServiceBrowser
和MCNearbyServiceAdvertiser
(但不能同时使用给定设备)。
我的MCNearbyServiceAdvertiser
始终使用相同的PeerId ...我将其存储在NSUserDefaults
中,符合2014年WWDC会议的建议。
当其他设备正在浏览服务时,浏览设备会按预期获得foundPeer
浏览器委托回调。
但是,如果在浏览设备上我切换离开我的应用程序(例如,通过主页按钮点击),然后切换回我的应用程序,我再次拨打foundPeer
广告设备,但是这个PeerId的时间不同了!
这看起来很奇怪,因为我的广告客户总是使用相同的PeerId。
为什么会发生这种情况的任何想法?意想不到?
(我打算看看一个新发现的具有给定PeerId的广告设备是否已经在我的广告客户的桌面视图中,但上述问题有点混淆了该计划。)
谢谢。
-Allan
答案 0 :(得分:0)
来自apple docs:“Multipeer Connectivity框架负责创建代表其他设备的对等对象。”
按下主页按钮并切换回应用程序后,框架创建了一个新的PeerID对象来表示广告设备。这是前一个对象,即使它代表相同的广告设备。所以你不能依赖PeerID对象相等。
答案 1 :(得分:0)
为了正确识别对等体,我建议您创建一个NSUUID字符串并将其存档在磁盘上并重复使用。初始化MCPeerID对象时,您应该传递的显示名称将是displayName + UUID。使用UI元素的显示名称和UUID来识别对等元素。
我希望它有所帮助。
答案 2 :(得分:0)
当您使用相同的显示名称创建两个时,您将不会获得相同的MCPeerID。这样可以确保名称冲突时的唯一性。通常使用设备名称作为显示名称。并非每个人都将其个性化。
如果要识别先前连接的对等方并被其识别,则必须保存并检索实际的MCPeerID。
要了解我的意思,请将以下代码粘贴到操场上并运行它。
import MultipeerConnectivity
let hostName = "TestPlaygroundHostName"
let firstPeerID = MCPeerID(displayName: hostName)
let secondPeerID = MCPeerID(displayName: hostName)
firstPeerID.hashValue == secondPeerID.hashValue