На iOS 10 Я пытаюсь создать совпадение с помощью GKTurnBasedMatchmakerViewController. Я могу отобразить представление, чтобы пользователь мог выбирать сватовство или приглашение. Я не могу понять, как надежно определить, какой матч был создан в ответ на это. Проблема в том, что в iOS 10 метод didFindMatch для GKTurnBasedMatchmakerViewControllerDelegate устарел. Этот метод использовался для вызова с совпадением. Старые времена были легкими!Как надежно определить, какой матч был создан в ответ на успех GKTurnBasedMatchmakerViewController
Сообщение об отказе говорит: «Используйте GKTurnBasedEventListener player: receivedTurnEventForMatch: didBecomeActive». В потоках переполнения документов и стека заполняются причины, по которым этот метод вызывается. См. Эту тему для хорошего списка: Gamecenter ios 9 GameCenter GKLocalPlayerListener methods not called. Если вы представляете себе пользователя, у которого уже есть несколько игр, вы увидите, что этот метод будет вызван по разным причинам, и это может произойти в любое время, насколько я знаю. Мой вопрос: как определить, какой из этих вызовов является «Я только что создал для вас матч, вот оно!» вызов.
Некоторых примеров, я думаю, не будут работать:
- Просто принимая первый вызов receivedTurnEventForMatch, что происходит после того, как вы поднимете GKTurnBasedMatchmakerViewController кажется неправильным, так как receivedTurnEventForMatch может быть уведомлением пользователя о том, что их очередь в другом игра. Если система не гарантирует, что, пока представление будет поднято, они вызовут этот метод только с совпадением, соответствующим представлению. Это похоже на довольно большой взлом, поэтому я предполагаю, что они этого не делают.
- Призыв к полученномуTurnEventForMatch с другим игроком в состоянии «Соответствие» и didBecomeActive = true, похоже, является решением для первого игрока в матче, но не вторым (так как оба игрока выполнены для соответствия).
- Посмотрите на MatchID и посмотрим, видели ли мы его раньше, и если нет, считая, что совпадение, которое только что было создано, кажется ненадежным, так как пользователь мог удалить приложение, а затем переустановить и мы забыли все о том, какие совпадения мы «видели раньше».
Я застрял, любая помощь приветствуется.
Из моего тестирования не работает таким образом: Если я –
от моего тестирования она не работает таким образом: Если я начну автоматический или пригласить игру: я нахожусь в состоянии GKTurnBasedParticipantStatusActive, и соответствующий игрок в GKTurnBasedPartic Статус ipantStatusMatching. Как я упоминал выше: Обнаружение, когда полученоTurnEventForMatch дает вам новую игру для первого игрока в матче, кажется простым: Ищите «подходящее» состояние. Это второй игрок, который является вызовом, поскольку у обоих есть состояние «Активный» (что также относится к множеству других случаев, когда это событие будет вызвано). –
@ Эрик, я достиг своего предела разочарования с помощью 'GK *' и разорвал весь этот код несколько месяцев назад. Итак, мне нужно было посмотреть старые ветви, чтобы посмотреть, что я делал. Я обновил ответ, соответственно. – Thunk