使用多点连接框架和附近服务(浏览器和广告商)在设备之间实现具有自动连接以交换少量数据的应用程序。
我建立了一个处理所有连接细节的会话管理器。它的委托是一个视图控制器,以便在接收到数据时处理 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 的短字符串。
要进行故障排除:
- 我检查了所有项目是否存在(会话及其委托、广告商及其委托)。
- 只要应用程序处于活动状态,服务浏览器和广告商就永远不会停止。
我现在不知道在哪里看!