我正在尝试跨设备保存游戏数据。我试图了解GameCenter是否具有执行此功能的能力。.我正在阅读文档。.
要在设备之间提供保存的游戏数据,开发人员需要创建 他们自己的解决方案,可以使用自己的服务器,也可以使用 二级服务,例如Facebook。使用新保存的游戏方法 在GKSavedGame,GKLocalPlayer和GKSavedGameListener类中找到, 开发人员可以轻松地将游戏数据保存到iCloud。
但是,当我在单独的设备上获取保存的游戏时,会得到不同的结果。两种设备都使用相同的GameCenter和iCloud帐户。注意:当我在设备上本地删除该应用程序时,可以检索本地 GameCenter数据。
var localPlayer: GKLocalPlayer {
return GKLocalPlayer.local
}
func authenticateLocalPlayer(completion: @escaping((_ gameCenterLoginVC: UIViewController?,_ gameCenterEnabled: Bool ) -> Void)) {
localPlayer.authenticateHandler = { [weak self] (viewController, error) -> Void in
guard let self = self else { return }
if viewController != nil {
completion(viewController, true)
} else if self.localPlayer.isAuthenticated {
self.gcEnabled = true
self.fetchSavedGames(completion: { (success) in
completion(nil, true)
})
} else {
completion(nil, false)
}
}
}
private func fetchSavedGames(completion: @escaping((_ success: Bool) -> Void)) {
localPlayer.fetchSavedGames { (savedGames, error) in
// savedGames here has different results across devices.
guard let savedGame = savedGames?.sorted(by: { (game1, game2) -> Bool in
game1.modificationDate ?? Date.init(timeIntervalSince1970: 0) > game2.modificationDate ?? Date.init(timeIntervalSince1970: 0)
}).first else {
completion(false)
return
}
savedGame.loadData(completionHandler: { (data, error) in
guard let data = data, error == nil else {
completion(false)
return
}
User.shared.loadUserWith(data: data)
completion(true)
})
}
}