Почему GKSession всегда пытается использовать Bluetooth при работе на устройстве, а не на симуляторе?

Я пытаюсь реализовать подключение GameKit без использования GKPeerPickerController. Что мне нужно, это установить соединение WiFi, а не Bluetooth.

Вот как я это делаю

self.gameSession = [[GKSession alloc] initWithSessionID:@"test" displayName:nil sessionMode:GKSessionModePeer];
self.gameSession.available = YES;
self.gameSession.delegate = self;
self.gameSession.disconnectTimeout = 0;
[self.gameSession setDataReceiveHandler:self withContext:nil];

Моя проблема в том, что устройства всегда пытаются подключиться через Bluetooth. По крайней мере, я так думаю, потому что следующее всегда появляется в консоли

BTM: подключение к BTServer

Даже если я выключаю Bluetooth, он всегда пытается разобраться с Bluetooth, а не с Wi-Fi. Более того - если Bluetooth включен - устройства никогда не видят друг друга, если я не использую GKPeerPickerController. Кроме того, симулятор никогда не пытается найти Bluetooth и всегда может установить соединение Wi-Fi и легко найти любое устройство. Как сделать так, чтобы GKSession выбирал WiFi-соединение?

1 ответ

Может быть, ваша проблема возникла с Jailbroken Device,

Реализации GKSession и GKSessionDelegate работают как для Bluetooth, так и для WiFi.

эти два класса проверяют Wi-Fi и Bluetooth и выбирают подходящую среду передачи.

Если ваш iPhone взломан, то могут возникнуть некоторые проблемы с BlueTooth или Wi-Fi при подключении через эту среду передачи, и, возможно, это мешает правильно работать с игровым комплектом.

А также попробуйте использовать

picker.connectionTypesMask = GKPeerPickerConnectionTypeOnline

проверить с условием в методах делегата

if (type == GKPeerPickerConnectionTypeOnline) {
}

Обновить:

См. Этот пример кода Apple. Https://developer.apple.com/library/ios/#samplecode/GKTapper/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010283

Другие вопросы по тегам