TLDR:
当其他设备收到邀请后呼叫invitationHandler
时,我希望发送邀请的设备知道哪些设备接受了邀请,哪些设备拒绝了邀请。
为了避免成为XY问题,这就是我正在做的事情:
我正在使用Multipeer Connectivity进行2-4人游戏。
我的应用程序的流程将是这样的:
这也是我需要知道设备是否拒绝邀请的原因。我已经知道如何检测设备是否接受了邀请,就像这样:
func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) {
switch state {
case .connected:
print("peerID accepted the invitation!")
default:
break
}
}
我认为MCNearbyServiceBrowserDelegate
中会有一个处理此问题的委托方法。我会想象它会被称为browser(_:peerDidDeclineInvitation:)
,但我没有找到类似的东西。
答案 0 :(得分:2)
当用户拒绝邀请时,发起邀请的设备将获得状态= MCSessionStateNotConnected
的委托状态更改。
据我所知,如果用户由于某种原因无法连接,也会发生这种状态,但是你可以区分这两个流,因为当连接失败时,你也会先将状态更改发送到MCSessionStateConnecting
然后再转到{ {1}}。
简而言之:
MCSessionStateNotConnected
更改为MCSessionStateConnecting
表示设备无法连接但邀请已被接受MCSessionStateNotConnected
,表示用户点击拒绝鉴于您在游戏启动时需要高级逻辑,您将无法依赖内置的MCSessionStateConnecting
,因为只要其中一个对等方启用此按钮就会启用MCBrowserViewController
按钮coonected。
您必须使用Done
,然后使用MCNearbyServiceBrowser
发起每个邀请,这样您就可以了解被邀请的人,并根据已连接的代理电话,未能连接的人或谁下降。
希望这会有所帮助......