現在、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 を実行したので、ハードウェアは適切に機能しているようです。ここで何がうまくいかないのでしょうか?