MCNearbyServiceAdvertiser委托方法从未调用过

问题描述:

使用多对等连接框架和Nearby Services(浏览器和广告客户)实现应用程序之间的自动连接以交换少量数据。MCNearbyServiceAdvertiser委托方法从未调用过

我构建了一个处理所有连接细节的会话管理器。它的委托是一个视图控制器,以便在收到数据时处理UI的更新。

会话管理器生成:

  • A服务广告客户,代理为会话管理器
  • A服务浏览器,该代表还为会话管理器

启动两个应用程序设备(一个在Xcode下获取日志,另一个独立),我通过服务浏览器委托相应的方法收到Found Peer消息。

正如另一条消息所述,我比较了MCPeerID(本地和来自接收的Peer)的displayName属性,以决定两者中的哪一个将发送邀请,从而避免了交叉邀请。

用作其它消息here说,我还添加了“可选” MCSession委托方法- (void)session:didReceiveCertificate:fromPeer:certificateHandler:

然而,委托方法MCNearbyServiceAdvertiser的(void)advertiser:didReceiveInvitationFromPeer:withContext:invitationHandler:永远不会被调用。在invitePeer:toSession:withContext:timeout:方法中超时设置后,只有MCSession委托方法(void)session:peer:didChangeState:收到NotConnected消息。

在各种选项建议:

  • 会话与安全零和MCEncryptionNone初始化;
  • discoveryInfo是零;
  • 在邀请中发送的上下文仅仅是一个存档为NSData的简短字符串。

要解决:

  • 我已检查所有项目都存在(会议和代表,广告商及其委托)。
  • 只要应用程序处于活动状态,Service Browser和Advertiser从不停止。

我不知道要在哪里查看!

+0

机器是否在同一WiFi网络上运行Xcode和设备? – ChrisH

+0

您是否正在使用浏览器中的对等方初始化MCSession:foundPeer:withDiscoveryInfo:消息而不是浏览器中的本地对等方?我犯了这个错误... –

+0

我也对这个问题感兴趣。我的代理方法多对等没有被调用。 – AnsonL

确保用于本地对等项的MCpeerID在发现阶段和邀请阶段都相同。

我有一个单独的会话管理器连接/传输工作者的结构。我犯了一个错误,即在工作人员中初始化一个新的MCpeerID以在邀请之前创建一个会话,导致相同的行为。

将MCpeerID和MCNearbyServiceBrowser传递给工作人员以创建会话并邀请修复该问题。