我目前正在用 Swift 制作一个 2 人战略棋盘游戏,需要通过本地 WiFi 或蓝牙连接两台 iPad。无论我今天尝试了什么,我都无法让它们相互检测(我已经尝试过本地 WiFi 和蓝牙)。
这是我的应用程序首次启动时在 UIViewController 中运行的授权代码(始终返回“本地播放器已通过身份验证。”以及 ID:
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 not authentication using Swift,因为这样做的“Swift 方式”对我也不起作用。
我还通过本地 WiFi 在两个设备上运行 Spelltower,所以看起来硬件运行正常。知道这里可能出了什么问题吗?