使用多对等连接框架和附近服务(浏览器和广告商),在设备之间实现自动连接以交换小数据的应用。
我构建了一个会话管理器来处理所有连接细节。它的委托是一个视图控制器,以便在接收数据时处理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消息。
在提出的各种方案中:
进行问题排查:
我不知道现在在哪里看看!
答案 0 :(得分:0)
确保您在本地对等方使用的MCpeerID对于发现阶段和邀请阶段都是相同的。
我的连接/转移工作者有一个单独的会话管理器结构。我错误地在工作人员中初始化新的MCpeerID以在邀请之前创建会话,从而导致相同的行为。
将MCpeerID和MCNearbyServiceBrowser传递给工作人员以创建会话并邀请修复该问题。