Можно ли подключиться к сеансу многорангового подключения без приглашения?

Я пытаюсь создать приложение, похожее на FireChat, в котором пользователи автоматически подключаются к сеансу многорангового подключения без отправки или получения приглашений для подключения.

Все учебники, которые я видел, используют MCBrowserViewController. Должна быть возможность присоединиться к сеансу без необходимости выбирать однорангового узла для подключения, а также отправлять и принимать запрос на подключение, если Firechat этого требует.

Кто-нибудь знает как это сделать?

Спасибо


person Juan Carlos Ospina Gonzalez    schedule 28.03.2014    source источник
comment
comment
вы нашли стабильное решение? что-нибудь опубликовано по этому поводу?   -  person achi    schedule 09.01.2015


Ответы (1)


Вместо использования MCBroswerViewController вы можете использовать MCNearbyServiceBrowser. Затем он вызовет метод делегата:

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

Затем вы можете автоматически отправить приглашение с чем-то вроде:

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

Однако при этом я столкнулся с множеством других проблем. Пока кажется:

  • Если оба устройства отправляют приглашения и принимают их, то очень скоро они случайным образом отключаются.
  • Если оба устройства рекламируют и транслируют одновременно, то они случайным образом отключаются.

На самом деле я сейчас работаю над библиотекой с открытым исходным кодом, чтобы попытаться сделать именно то, о чем вы просите: подключать устройства без каких-либо приглашений или браузера (без пользовательского интерфейса).

Вот оно: https://github.com/plivesey/PLPartyTime

Однако пока это не работает. Я не полностью решил обе описанные выше проблемы, но если вы хотите проверить код и посмотреть, что у вас получится, сделайте это. Пожалуйста, дайте мне знать о любом прогрессе, который вы делаете. Эта структура разочаровывает иметь дело с ...

person plivesey    schedule 15.04.2014
comment
В конце концов я узнал о MCNearbyServiceBrowser и создал реализацию. Я знаю о проблемах, когда оба отправляют приглашения и принимают их, поэтому я сделал так, чтобы дать одному узлу приоритет над другим. Приоритет определяется тем, кто имеет самую раннюю отметку времени открытия приложения (кто открыл приложение первым) и кто уже подключил одноранговые узлы. Я храню эту информацию в NSDictionary DiscoveryInfo. :) Одноранговый узел с приоритетом отправляет приглашение, а другой просто ждет. - person Juan Carlos Ospina Gonzalez; 17.04.2014
comment
Другой способ сделать это — просто сравнить идентификаторы узлов. Тот, у кого меньше peerID, получает приоритет. - person plivesey; 16.10.2014
comment
Метод @plivesey является рекомендуемым передовым методом при разработке для iOS 7. Однако, начиная с iOS 8, это не должно вызывать никаких проблем, как описано в developer.apple.com/library/content/qa/qa1869/_index.html. - person ken; 12.01.2017