2015-03-23 5 views
1

Я работаю над приложением, реализующим инфраструктуру Multipeer Connectivity (MC). При первом запуске приложения через Xcode на двух отдельных телефонах, phoneBob и phoneJack, я инициализирую MCSession для телефонаBob под номером displayName 'BobA' и MCSession для телефона. Подкатегорию под номером displayName 'JackA'. MC для phoneBob находит «JackA» просто отлично, и наоборот, и два могут подключаться без проблем.Почему система межсетевых соединений является внешней аудиторией, а также несуществующими зарубежными аналогами?

Однако после удаления приложения и повторный запуск через Xcode, я инициализировать MCSession для phoneBob под displayName «Bobb» и MCSession для phoneJack под displayName «JackB». В дополнение к телефонуBob, находящемуся в другом коллеге «JackB», к которому можно успешно подключиться, он также обнаруживает чужой «JackA» в журнале, хотя «JackA» не может быть подключен к предыдущей версии приложения и связан с предыдущей версией приложения , Это также происходит наоборот, когда phoneJack находит не только иностранного сверстника «BobB», но и иностранного «BobA». Не только это, но и PhoneBob на самом деле найдет СЕБЯ для обеих приложений приложения «BobA» и «BobB» в качестве зарубежных аналогов, а PhoneJack найдет себя «JackA» и «JackB» в качестве зарубежных аналогов.

Я вызываю этих зарубежных сверстников из предыдущих установок приложения, которые нельзя подключить к «призрачным сверстникам». Чем больше раз я удаляю и запускаю приложение через Xcode, тем больше количество этих призрачных пэров, найденных MC. Обратите внимание, что эти призрачные одноранговые узлы появляются только во втором и последующих запусках приложения после удаления приложения. Перезапуск телефона и запуск приложения избавляются от этих призрачных сверстников, но я просто совершенно смущен тем, почему MC найдет СЕБЯ как иностранного сверстника, а также сверстников, которых на самом деле не существует. Возможно ли, что при второй установке приложения MC собирает на призрачной сессии с первой установки приложения, которая по какой-то причине никогда не прерывалась? Возможно ли, что сеанс, который мы инициализировали в первой установке, сохранился даже после удаления приложения?

+0

Пожалуйста, ваш код для создания сессий и коллег и для выполнения соединений. –

ответ

2

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

Исправление состоит в том, что при первом создании MCPeerID вы должны сериализовать и сохранить его. Затем на последующих запусках вы загружаете и повторно используете одного и того же пэра, это не позволит вам когда-либо видеть себя как призрак, потому что, когда вы зарегистрируетесь, вы теперь замените старую версию-призрак.

Существует поток на старых Девых форумах Apple, с примерами кодом и ответом от инженера Apple, подтверждающего, что это рекомендуемый подход: https://devforums.apple.com/message/1002886#1002886

+0

Спасибо, что указали мне на этот форум. Несмотря на то, что эти сверстники-призраки больше не вызывают каких-либо очевидных проблем, очень полезно увидеть множество подходов, которые люди восприняли к этой проблеме, и различные другие проблемы Multipeer. –

1

Имел аналогичную проблему в Xamarin iOS, что происходило - я каждый раз создавал новую сессию в своем методе StartSession. Я храню его как синглтон сейчас - таким образом, я получаю один и тот же сеанс, и мое устройство не находит себя иностранным партнером.