TLDR:
当其他设备在收到邀请后调用invitationHandler时,我希望发送邀请的设备知道哪个设备接受了邀请,哪个设备拒绝了邀请。
为了避免出现XY问题,下面是我正在做的事情:
我使用多点连接在一个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:),但我没有发现任何类似的东西。
发布于 2017-10-16 07:51:32
当用户拒绝邀请时,发起邀请的设备将得到一个委托状态更改,状态= MCSessionStateNotConnected。
据我所知,如果用户由于某种原因无法连接,也会发生这种状态,但是您可以区分这两个流,因为当连接失败时,还会得到状态更改,首先是MCSessionStateConnecting,然后是MCSessionStateNotConnected。
因此,简而言之:
MCSessionStateConnecting更改为MCSessionStateNotConnected意味着设备连接失败,但invite被接受MCSessionStateConnecting,意味着用户点击下降。考虑到当游戏可以启动时,您需要高级逻辑,您将无法依赖内置的MCBrowserViewController,因为这将使Done按钮在一个对等点被初始化后立即启用。
您必须使用MCNearbyServiceBrowser,然后使用-invitePeer:toSession:withContext:timeout:启动每个邀请,因此您有一种方法可以知道谁被邀请,以及基于已连接、未能连接或拒绝的委托调用。
希望这能帮上忙。
https://stackoverflow.com/questions/46764955
复制相似问题