E. Tess E. Tess - 3 years ago 166
Swift Question

Swift: How to implement a leaderboard?

On iTunes Connect I already setup everything correctly. This is what i tried:

func saveHighscore(number: Int){

if GKLocalPlayer.localPlayer().isAuthenticated {

let scoreReporter = GKScore(leaderboardIdentifier: "This")
scoreReporter.value = Int64(number)
let scoreArray : [GKScore] = [scoreReporter]

GKScore.report(scoreArray, withCompletionHandler: nil)

}

}

func showLeaderBoard(){
let viewController = self.view.window?.rootViewController
let gcvc = GKGameCenterViewController()

gcvc.gameCenterDelegate = self

viewController?.present(gcvc, animated: true, completion: nil)


}

func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) {
gameCenterViewController.dismiss(animated: true, completion: nil)

}


Finally I call the saveHighscore function but it doesn't work. What am I miss?

Answer Source

You need to authenticate the player. You can do this with this function:

func authPlayer (){
    let localPlayer = GKLocalPlayer.localPlayer()
    localPlayer.authenticateHandler = {
    (view, error) in
        if view != nil{
            self.present(view!, animated: true, completion: nil)
        }
        else {
            print(GKLocalPlayer.localPlayer().isAuthenticated)
        }
    }

}

You need to call this function in the begin.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download