2014-03-28 53 views
7

我正在尝试创建一个类似于FireChat的应用程序,用户可以自动连接到Multipeer Connectivity会话,而无需发送或接收连接邀请。是否可以在没有邀请的情况下连接到Multipeer Connectivity会话?

我看过的所有教程都使用了MCBrowserViewController。必须可以加入一个会话,而不必选择一个对等体进行连接,并发送并接受连接请求,如果Firechat认为它。

有谁知道如何做到这一点?

感谢

+0

可能重复[多点对点连接没有BrowserViewController UI](http://stackoverflow.com/questions/22652797/multi-peer-connectivity-without-browserviewcontroller-ui) – ChrisH

+0

您是否找到了稳定的解决方案?在这方面发表的任何内容? – achi

回答

12

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

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

然而,在这样做,我碰到吨的其他问题:

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

然后你就可以自动的东西,如发送邀请。到目前为止,它似乎:

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

我实际上正在开发一个开源库,试着去做你想要的东西:连接没有任何邀请或浏览器(没有UI)的设备。

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

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

+4

我最终找到了关于MCNearbyServiceBrowser并创建了一个实现。我知道发送邀请和接受邀请时的问题,所以我所做的就是给予对方优先权。优先级由谁拥有最早的“开放应用”时间戳(谁首先打开应用)以及谁已经连接了对等点来定义。我将这些信息存储在DiscoveryInfo NSDictionary中。 :)具有优先级的对等者可以发送邀请,而其他人只需等待。 –

+3

这样做的另一种方法是比较peerID。谁拥有较低的peerID会获得优先权。 – plivesey

+0

@plivesey是iOS 7开发时推荐的最佳实践。但从iOS 8开始,这不应该引起任何问题,如https://developer.apple.com/library/content/qa/qa1869/中所述。 _index.html。 – ken

相关问题