Проблема с соединением с GKPeerPickerController - PullRequest
3 голосов
/ 19 мая 2011

Я работаю над игрой для iOS с GKSession и GKPeerPickerController. Я обнаружил, что процесс подключения двух устройств iOS медленный и ненадежный, даже если они находятся рядом друг с другом. Давайте назовем мои устройства «устройство A» и «устройство B».

Вот что обычно происходит:

  1. На каждом устройстве я нажимаю кнопку подключения моего приложения. Затем каждое устройство отображает окно «iPad, iPhone или iPod touch».

  2. Обычно довольно быстро оба устройства замечают, что другое существует.

  3. Затем я говорю одному из устройств (скажем, устройству A) подключиться к другому.

  4. Довольно быстро окно устройства B сообщает, что устройство A недоступно.

  5. Это то, где это становится раздражающим. Через некоторое время, составляющее от 1 секунды до никогда, на устройстве B появляется окно, сообщающее, что устройство A хочет подключиться, и запрашивающее устройство B, хочет ли оно принять подключение.

  6. Если вышеприведенное окно всплывает, все идет нормально. Но это иногда занимает много времени, а иногда и вовсе не происходит.

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

Что я могу с этим поделать?

Мой метод подключения довольно прост:

-(void) findPeerPickerOpponents {
    GKPeerPickerController *picker;
    picker = [[GKPeerPickerController alloc] init]; 
    picker.delegate = self;
    [picker show]; 
    [self.connectionDelegate disableIdleTimer];
}

Ответы [ 2 ]

0 голосов
/ 16 сентября 2013

Я полностью разочаровался в peerPickerController.Проверьте пример кода Apple GKRocket.- Использует GKSession и табличные просмотры сверстников.Сейчас на моих устройствах он немного глючит, по причинам, которые мне не ясны, но я использовал базовые классы: GameLobby и SessionManager, чтобы довольно хорошо подключить устройства.Также имеет то преимущество, что не ограничивает вас одним пэром.

0 голосов
/ 14 ноября 2011

хорошо, что вы должны сделать:
- допустим, у вас есть устройство A, B и C
- устройство A сканирует, устройство B только что начало сканирование
- устройство A видит устройство B как новый узел- оно отправляет приглашение B
- устройство B получает приглашение - оно автоматически подтверждает его, оба устройства подключены, пользователю не отправляется уведомление, за исключением того, что устройства отображаются в лобби
- устройство C отображается
- устройства A и B пытаются подключиться к нему, они автоматически подключаются и отображаются в лобби
- игрок касается устройства B на устройстве A
- устройство A отправляет пакет WANNAPLAY на B
- всплывающее окно с запросомесли игрок хочет играть с A - игрок отвечает ДА ​​
- устройство B отправляет ACCEPTED на A и отключает всех, кроме A (отправляя DISCONNECT)
- устройство A получает ACCEPTED и отключает всех, кроме B (отправляя DISCONNECT)
- устройство C получает 2 раза ОТКЛЮЧЕНО и удаляет А и В из своего лобби

Это работает НАМНОГО ЛУЧШЕ, чем стандартный подход, даже если его примерно в 10 раз большеork - я сделал это обоими способами, и это очень хорошее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...