【问题标题】:Is it possible to connect to a Multipeer Connectivity session without an invitation?是否可以在没有邀请的情况下连接到 Multipeer Connectivity 会话?
【发布时间】:2014-05-08 05:23:05
【问题描述】:

我正在尝试创建一个类似于 FireChat 的应用,其中用户会自动连接到 Multipeer Connectivity 会话,而无需发送或接收连接邀请。

我看到的所有教程都使用了 MCBrowserViewController。如果 Firechat 允许,必须可以加入会话,而无需选择要连接的对等方并发送和接受连接请求。

有人知道怎么做吗?

谢谢

【问题讨论】:

标签: ios objective-c multipeer-connectivity


【解决方案1】:

您可以使用 MCNearbyServiceBrowser,而不是使用 MCBroswerViewController。 然后它会调用一个委托方法:

- (void)browser:(MCNearbyServiceBrowser *)browser foundPeer:(MCPeerID *)peerID withDiscoveryInfo:(NSDictionary *)info;

然后您可以自动发送邀请,例如:

[browser invitePeer:peerID
            toSession:self.session
          withContext:nil
              timeout:10];

但是,在这样做的过程中,我遇到了很多其他问题。目前看来:

  • 如果两个设备都发送邀请并接受它们,那么它们很快就会随机断开连接。
  • 如果两个设备同时进行广告和广播,则它们会随机断开连接。

我现在实际上正在开发一个开源库,以尝试完全按照您的要求进行操作:无需任何邀请或浏览器即可连接设备(无需 UI)。

这里是:https://github.com/plivesey/PLPartyTime

但是,它还没有工作。我还没有完全解决上述两个问题,但是如果你想查看代码并看看你能解决什么问题,那就去做吧。请让我知道您取得的任何进展。处理这个框架令人沮丧......

【讨论】:

  • 我最终发现了 MCNearbyServiceBrowser 并创建了一个实现。我知道发送邀请和接受邀请时的问题,所以我所做的就是让一个同行优先于另一个。优先级由谁拥有最早的“打开应用程序”时间戳(谁首先打开应用程序)以及谁已经连接了对等点来定义。我将此信息存储在 DiscoveryInfo NSDictionary 中。 :) 具有优先权的对等方可以发送邀请,而另一个则只是等待。
  • 另一种方法是比较 peerID。拥有较低 peerID 的人将获得优先权。
  • @plivesey is method 是为 iOS 7 开发时推荐的最佳实践。但是从 iOS 8 开始,这应该不会导致任何问题,如 developer.apple.com/library/content/qa/qa1869/_index.html 中所述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
相关资源
最近更新 更多