从未调用过MCNearbyServiceAdvertiser委托方法

时间:2014-02-27 14:55:28

标签: multipeer-connectivity mcsession

使用多对等连接框架和附近服务(浏览器和广告商),在设备之间实现自动连接以交换小数据的应用。

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

会话管理器构建:

  • 服务广告商,代理人是会话管理员
  • 服务浏览器,代理人也是会话管理器

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

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

如另一条消息here所述,我还添加了“可选”MCSession委托方法- (void)session:didReceiveCertificate:fromPeer:certificateHandler:

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

在提出的各种方案中:

  • 使用security nil和MCEncryptionNone;
  • 初始化会话
  • discoveryInfo是nil;
  • 邀请中发送的上下文只是一个存档为NSData的短字符串。

进行问题排查:

  • 我检查过所有项目都已存在(会话及其代理人,广告客户及其代表)。
  • 只要应用处于有效状态,服务浏览器和广告客户就永不停止。

我不知道现在在哪里看看!

1 个答案:

答案 0 :(得分:0)

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

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

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