startBrowsingForNearbyPlayersWithHandler() в iOS 8 в Swift

В настоящее время я делаю стратегическую настольную игру для 2 игроков в Swift и мне нужно подключить два iPad по локальной сети Wi-Fi или Bluetooth. Независимо от того, что я пробовал сегодня, я не могу заставить их обнаруживать друг друга (я пробовал через локальный WiFi и Bluetooth).

Вот мой код авторизации, который запускается в UIViewController при первом запуске моего приложения (который всегда возвращает "Self local player authenticated." Вместе с идентификатором:

private func authenticateLocalPlayer() {
    var localPlayer = getLocalPlayer()

    // If Apple were doing their job right, this is what the proper code should look like:
    // var localPlayer = GKLocalPlayer.localPlayer()

    if ( !localPlayer.authenticated ) {
        localPlayer.authenticateHandler = { (viewController : UIViewController!, error : NSError!) -> Void in
            NSLog("Error: \(error)")
            if viewController != nil {

                // Authenticated?
                self.presentViewController(viewController, animated: true, completion: nil)
                NSLog("viewController is not nil")
            } else if (localPlayer.authenticated == true) {
                NSLog("Self local player is authenticated.")
                NSLog("My name is \(localPlayer.playerID)")
            } else {
                NSLog("Not authenticated")
                NSLog("Player is \(localPlayer.playerID)")
            }
        }
    } else {
        NSLog("Player is already authenticated!")
    }
}

и вот мой код для обнаружения соседних устройств в отдельном контроллере UIViewController:

override func viewDidLoad() {
    devicesLabel.text = "Waiting for devices..."
    searchForDevices()
    NSLog("Ran searchForDevices()")
}

private func searchForDevices() {
    GKMatchmaker.sharedMatchmaker().startBrowsingForNearbyPlayersWithHandler() {
        var status = $1 ? "true" : "false"
        self.devicesLabel.text = "Reachability changed for player \($0) with status: \(status)"
    }
}

Независимо от того, что я делаю с моими двумя iPad (оба - модель iPad 3), ни один никогда не видит другого. Правильно ли я вызываю startBrowsingForNearbyPlayersWithHandler?

Также обратите внимание, что в приведенном выше коде авторизации я использую обходной путь Objective-C, рекомендованный в этом посте: Game Center не выполняет аутентификацию с помощью Swift, поскольку "Swift-способ" этого не помог мне.

Я также запустил Spelltower на обоих устройствах по локальной сети Wi-Fi, так что похоже, что оборудование работает нормально. Есть идеи, что здесь может пойти не так?

2 ответа

Решение

Я решил отказаться от разработки этого через Game Center и использовать вместо этого Multipeer Connectivity.

Вы не регистрируете класс для получения обновлений приглашений. Вам необходимо зарегистрировать класс и реализовать методы, соответствующие протоколу для GKLocalPlayerListener. Смотрите мой ответ в этом посте (он находится в Objective-C, но применяется та же концепция):

Некоторые начальные вопросы по теме NearbyPlayersWithReachableHandler

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