Я использую BlueTooth
и Wifi
программу чата для iPhone
.Для подключения я использую GameKit
.Но из-за некоторых особых требований приложения я не могу использовать значение по умолчанию GKPeerPickerController
.Поэтому я вместо этого создал комбо GKSession
и GKSessionDelegate
для обнаружения пиров.После того, как они найдут друг друга, они смогут общаться.
Теперь я проверил функциональность чата на трех mac-minis
, используя simulator
, один симулятор и один iPod
, один iPhone
и один Simulator
,Я могу общаться во всех вышеперечисленных сценариях.Но кое-как iPhone
и iPod
не будут обнаруживать друг друга.
Также мне любопытно, какой тип связи происходит между всеми этими устройствами.Потому что теоретически GameKit
поддерживает и BlueTooth
, и WiFi
.Теперь проблема в том, что GKPeerPickerController
давайте выберем конкретно между BlueTooth
и WiFi
(к сожалению, реализация WiFi
нигде не документирована.) Это хорошо, но как насчет пользовательского сценария, когда кто-то реализует его илиее собственные GKSession
и GKSessionDelegate
Комбо.Когда создается объект GKSession
с использованием единственного доступного метода init
:
– initWithSessionID:displayName:sessionMode:
параметр конфигурации, который обеспечивает только sessionMode
, но имеет только три параметра
GKSessionModeServer,
GKSessionModeClient,
GKSessionModePeer,
Нетиз которых указывает выбор соединения между Bluetooth
и WiFi
.
Но я отключил bluetooth
на iPod
и протестировал его с mac-mini
, он работает, так что я предполагаю, что он использует WiFi
.Также в журнале я получаю следующую строку:
DNSServiceRegister callback: Ref=4c3f3d0, Flags=2, ErrorType=0 name=00XGT0H0A..BTChat1 regtype=_0eilkgh5o2mq17._udp. domain=local.
Часть DNSServiceRegister
и udp
заставляет меня думать, что общение происходит в течение TCP/IP
.
Значит ли это, что когда я начинаю с GKSession
и GKSessionDelegate
, по умолчанию используется только Wi-Fi или он поддерживает одновременно WiFi
и bluetooth
(хотя яне получил ни единого указания на то, что BlueTooth
соединение происходило).
Но GameKit
должно быть в основном примерно BlueTooth
Верно?Кто-нибудь может пролить свет на ситуацию о том, что именно происходит?
Также вы видели пример кода, где кто-то реализовал интерфейс WiFi для GKPeerPickerController
?
Решено:
ОК Нашел сам.Пользовательские реализации GKSession
и GKSessionDelegate
, как я упоминал в этом вопросе, работают как для bluetooth
, так и WiFi
.На самом деле у iPhone (JailBroked)
, который я использую, были некоторые проблемы с BlueTooth
, и, возможно, это мешало Gamekit
работать должным образом, после полной перезагрузки телефона и выключения режима Airplane
, несколько раз включенного bluetooth
bluetooth
работает на телефоне.Теперь приложение работает нормально в режимах WiFi
и BlueTooth
.