Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to display Leaderboard Sets in iOS

I was trying to get this to work all last night but it wouldnt. Can anyone help?

I use the following code to display a leaderboard: gameCenterViewController.leaderboardIdentifier = leaderboardId

This works fine for normal leaderboards, but fails to load any leaderboard sets, when I use the leaderboardSetId. Can you link directly to leaderboard sets and if so how do you do this?

Thanks.

like image 899
Charlie Seligman Avatar asked May 05 '17 08:05

Charlie Seligman


1 Answers

Please do refer below code and cross verify your configuration.

Hope this would help you.

import GameKit
class YourViewController: UIViewController, GKGameCenterControllerDelegate {

var gcEnabled = Bool() // Stores if the user has Game Center enabled
var gcDefaultLeaderBoard = String() // Stores the default leaderboardID

override func viewDidLoad() {
    super.viewDidLoad()

 self.authenticateLocalPlayer()

}

func authenticateLocalPlayer()
{
    let localPlayer: GKLocalPlayer = GKLocalPlayer.localPlayer()

    localPlayer.authenticateHandler = {(ViewController, error) -> Void in
        if((ViewController) != nil) {

            // 1 Show login if player is not logged in

            self.presentViewController(ViewController!, animated: true, completion: nil)

        } else if (localPlayer.authenticated) {

            // 2 Player is already euthenticated & logged in, load game center

            self.gcEnabled = true

            // Get the default leaderboard ID
            localPlayer.loadDefaultLeaderboardIdentifierWithCompletionHandler({ (leaderboardIdentifer: String?, error: NSError?) -> Void in
                if error != nil {
                    print(error)
                } else {
                    self.gcDefaultLeaderBoard = leaderboardIdentifer!
                }
            })


        } else {
            // 3 Game center is not enabled on the users device
            self.gcEnabled = false
            print("Local player could not be authenticated, disabling game center")
            print(error)
        }

    }
}


    @IBAction func clickToLeaderBoard(sender: UIButton) {

        let gcVC: GKGameCenterViewController = GKGameCenterViewController()
        gcVC.gameCenterDelegate = self
        gcVC.viewState = GKGameCenterViewControllerState.Leaderboards
        gcVC.leaderboardIdentifier = "YourLeaderboardId"
        self.presentViewController(gcVC, animated: true, completion: nil)

    }

func saveScoreOnGameCenter()
{
    let leaderboardID = "YourLeaderboardId"
    let sScore = GKScore(leaderboardIdentifier: leaderboardID)
    sScore.value = Int64(10)

    GKScore.reportScores([sScore], withCompletionHandler: { (error: NSError?) -> Void in
        if error != nil {
            print(error!.localizedDescription)
        } else {
            print("Score submitted")

        }
    })
}

func gameCenterViewControllerDidFinish(gcViewController: GKGameCenterViewController)
{
    self.dismissViewControllerAnimated(true, completion: nil)
}

}

Update

Also please do check your leaderboard configuration from back end.

Some good posts are here.

http://www.appcoda.com/ios-game-kit-framework/

https://developer.apple.com/game-center/

https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/GameKit_Guide/GameCenterOverview/GameCenterOverview.html

like image 57
Hasya Avatar answered Oct 07 '22 19:10

Hasya