2014-03-28 3 views
7

Ich versuche eine ähnliche App wie FireChat zu erstellen, bei der Benutzer automatisch mit einer Multipeer Connectivity-Sitzung verbunden werden, ohne Einladungen zum Herstellen einer Verbindung zu senden oder zu empfangen.Kann eine Verbindung zu einer Multipeer Connectivity-Sitzung ohne Einladung hergestellt werden?

Alle Tutorials, die ich gesehen habe, verwenden den MCBrowserViewController. Es muss möglich sein, einer Sitzung beizutreten, ohne einen Peer auswählen zu müssen, um eine Verbindung herzustellen und zu senden und zu akzeptieren, wenn Firechat es nutzt.

Weiß jemand, wie man das macht?

Dank

+0

möglich Duplikat von [Multi-Peer-Konnektivität ohne BrowserViewController UI] (http://StackOverflow.com/Questions/22652797/MultiPeer-connectivity-without-Browserviewcontroller-ui) – ChrisH

+0

hast du eine stabile Lösung gefunden? alles in dieser Hinsicht veröffentlicht? – achi

Antwort

12

Statt eine MCBroswerViewController zu verwenden, können Sie MCNearbyServiceBrowser verwenden. Es wird dann einen Delegaten-Methode aufrufen:

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

Dann sind Sie automatisch eine Einladung mit so etwas wie senden:

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

jedoch in dies zu tun, ich habe in Tonnen andere Probleme lief. So weit scheint es:

  • Wenn beide Geräte Einladungen senden und akzeptieren, dann werden sie nach dem Zufallsprinzip sehr bald getrennt.
  • Wenn beide Geräte zur gleichen Zeit werben und senden, werden sie nach dem Zufallsprinzip getrennt.
  • Ich arbeite gerade an einer Open-Source-Bibliothek, um genau das zu tun, was Sie verlangen: Verbinden Sie Geräte ohne Einladungen oder Browser (keine Benutzeroberfläche).

    Hier ist sie: https://github.com/plivesey/PLPartyTime

    Es ist jedoch noch nicht zu arbeiten. Ich habe die beiden obigen Probleme nicht vollständig gelöst, aber wenn Sie den Code überprüfen und sehen möchten, was Sie daraus machen können, gehen Sie dazu. Bitte lassen Sie mich von jedem Fortschritt wissen, den Sie machen. Dieses Framework ist frustrierend im Umgang mit ...

    +4

    Ich habe irgendwann über MCNearbyServiceBrowser herausgefunden und eine Implementierung erstellt. Ich weiß über die Probleme Bescheid, wenn sowohl Einladungen verschickt als auch angenommen werden, also habe ich dem einen Peer Vorrang vor dem anderen gegeben. Die Priorität wird definiert durch: Wer hat den frühesten "offenen App" Zeitstempel (wer hat die App zuerst geöffnet) und wer hat bereits Peers verbunden? Ich speichere diese Information im DiscoveryInfo NSDictionary. :) Der Peer mit Priorität bekommt die Einladung zu senden, während der andere nur wartet. –

    +3

    Eine andere Möglichkeit, dies zu tun, besteht darin, nur die peerIDs zu vergleichen. Wer eine niedrigere PeerID hat, bekommt Priorität. – plivesey

    +0

    @plivesey is method ist die empfohlene Best Practice bei der Entwicklung für iOS 7. Allerdings sollte dies ab iOS 8 keine Probleme verursachen, wie unter https://developer.apple.com/library/content/qa/qa1869/ beschrieben. _index.html. – ken