Game Center used to work perfectly a while ago for a different app that I made. However strange things are happening with my current one for about two weeks now.
Uploading and download report no error and I can see my score fine. But if I stop play my game and then 6 hours later come back to it, my score is no longer there in the game center. I mean, literally no score at all. Downloading from game center which works 6 hours ago now cannot retrieve my score.
Game center status is live. I can see my score and others in "manage score" section. However, I cannot see anything except my score in the leaderboard from GKGameCenterViewController
.
As far as I'm concern, everything has been configured correctly. Game Center in app's capability is on.
Code for showing leaderboard:
func showLeaderBoard() {
if GKLocalPlayer.localPlayer().isAuthenticated == false {
self.present(authenticationViewController!, animated: true, completion: nil)
return
}
let gamecenter = GKGameCenterViewController()
gamecenter.gameCenterDelegate = self
gamecenter.viewState = .leaderboards
gamecenter.leaderboardIdentifier = leaderBoardID
present(gamecenter, animated: true, completion: nil)
}
Code for downloading score:
func downloadBestScoreFromGameCenter() {
if GKLocalPlayer.localPlayer().isAuthenticated == false {return}
print("Downloading Score...")
let leaderBoard = GKLeaderboard()
leaderBoard.identifier = leaderBoardID
leaderBoard.loadScores(completionHandler: {
[unowned self] (scores, error) in
print("Download Error: \(error)")
scores?.forEach({print("\($0.player?.displayName!) \($0.value)")})
if let localPlayerScore = leaderBoard.localPlayerScore?.value {
self.bestScore = Int(localPlayerScore)
self.saveGameForCurrentState()
} else {
self.bestScore = 0
}
})
}
And uploading
func uploadBestScoreToGameCenter() {
if GKLocalPlayer.localPlayer().isAuthenticated == false {return}
let scoreItem = GKScore(leaderboardIdentifier: leaderBoardID)
scoreItem.value = Int64(self.bestScore)
GKScore.report([scoreItem], withCompletionHandler: {
(error) in
if let error = error {
print(error)
} else {
print("Upload complete: \(scoreItem.value)")
}
})
}
Ok the leaderboard is now working today. I guess you just have to wait people.