2017-05-05 22 views
8

我試圖讓這個工作在昨晚完成,但它不會。誰能幫忙?如何在iOS中顯示排行榜集合

我用下面的代碼來顯示排行榜: gameCenterViewController.leaderboardIdentifier = leaderboardId

這正常排行榜工作正常,但無法加載任何排行榜套,當我使用leaderboardSetId。你能直接鏈接到排行榜集,如果是的話,你如何做到這一點?

謝謝。

回答

-2

確保您已認證本地播放器和在iTunes Connect中設置的排行榜,您需要report your scores to GameCenter以確保您使用64位Int。 現在你可以添加這顯示了領先的本土球員:

func showGKGameCenterViewController(_ viewController: UIViewController) { 
    if gameCenterIsDisabled { 
     print("Local player is not authenticated") 
    } 
    let gameCenterViewController = GKGameCenterViewController() 
    gameCenterViewController.delegate = self 
    gameCenterViewController.viewState = GKGameCenterViewControllerState.default 

    viewController.presentViewController(gameCenterViewController, animated: true, completion: nil) 
} 
1

請你參考下代碼與跨驗證配置。

希望這會幫助你。

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) 
} 

} 

更新

也請做檢查從後端的排行榜配置。

一些很好的帖子在這裏。

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

+0

Ive得到了正常的排行榜顯示它只是不顯示在排行榜套。我嘗試用我的代碼中的排行榜集ID替換leaderboardIds,但這沒有奏效。我認爲這個解決方案假設你只需要做這些事情? –

+0

是的,這是最低要求,你可以嘗試整合我在這裏給出的代碼並檢查。 – Hasya