1

使用多点连接框架和附近服务(浏览器和广告商)在设备之间实现具有自动连接以交换少量数据的应用程序。

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

会话管理器构建:

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

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

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

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

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

在提出的各种选择中:

  • Session 初始化为 security nil 和 MCEncryptionNone;
  • 发现信息为零;
  • 邀请中发送的上下文只是一个归档为 NSData 的短字符串。

要进行故障排除:

  • 我检查了所有项目是否存在(会话及其委托、广告商及其委托)。
  • 只要应用程序处于活动状态,服务浏览器和广告商就永远不会停止。

我现在不知道在哪里看!

4

1 回答 1

0

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

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

将 MCpeerID 和 MCNearbyServiceBrowser 传递给工作人员以创建会话并邀请解决了问题。

于 2014-09-05T08:07:31.560 回答