2

現在、Swift で 2 人用の戦略ボード ゲームを作成しており、2 台の iPad をローカル WiFi または Bluetooth 経由で接続する必要があります。今日何を試しても、お互いを検出できません (ローカル WiFi と Bluetooth で試しました)。

これは、アプリが最初に起動したときに UIViewController で実行される認証コードです (これは常に ID と共に "Self local player is 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)"
    }
}

2 台の iPad (どちらも iPad 3 のモデル) で何をしようとも、どちらにももう一方が表示されることはありません。startBrowsingForNearbyPlayersWithHandler を正しく呼び出していますか?

また、上記の認証コードでは、次の投稿で推奨されている Objective-C の回避策を使用していることにも注意してください: Game Center not authenticateating using Swift

また、ローカル WiFi を介して両方のデバイスで Spelltower を実行したので、ハードウェアは適切に機能しているようです。ここで何がうまくいかないのでしょうか?

4

2 に答える 2