我正试图在游戏中心报道我的高分。我认为我的代码正在运行,但游戏中心没有使用高分进行更新。 使用此引用名称创建排行榜:“funfairBalloon”和此排行榜ID:55009943。 我有3个沙盒测试人员,游戏中心启用,玩家在游戏中心进行身份验证。
我的身份验证和报告代码是:
func authenticateLocalPlayer()
{
var localPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler =
{ (viewController : UIViewController!, error : NSError!) -> Void in
if viewController != nil
{
self.presentViewController(viewController, animated:true, completion: nil)
}
else
{
if GKLocalPlayer.localPlayer().authenticated {
let gkScore = GKScore(leaderboardIdentifier: "55009943")
gkScore.value = Int64(highscore)
GKScore.reportScores([gkScore], withCompletionHandler: {(error) -> Void in
let alert = UIAlertView(title: "Success",
message: "Score updated",
delegate: self,
cancelButtonTitle: "Ok")
alert.show()
})
}
}
}
}
你知道吗?
答案 0 :(得分:3)
最佳做法是将您的应用ID添加到排行榜标识符中。在此之前我无法让它工作。你可能遇到同样的麻烦。制作名为“com.whateverName.55009943”的测试排行榜并更新您的代码。看看它是否像我那样有效。
如果您正在为沙盒测试人员使用Test Flight,请确保在iTunes连接上添加它们。
最后,如果您遵循上述建议,此link应该可以帮助您解决为什么您没有看到任何人出现在排行榜上。
答案 1 :(得分:0)
您可以在此github repo https://github.com/jocelynlih/SwiftGameBook/blob/master/PencilAdventure/PencilAdventure/ScoreManager.swift#L26
中查看此逻辑要报告需要调用的分数,请传递authenticateHandler闭包函数,如果localPlayer经过身份验证,则报告分数。
var localPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler = {(viewController : UIViewController!, error : NSError!) -> Void in
if viewController != .None {
// Show view controller
} else {
if localPlayer.authenticated {
var scoreToReport = GKScore(leaderboardIdentifier: "Leaderboard\(level)", player: localPlayer)
scoreToReport.value = Int64(score)
GKScore.reportScores([scoreToReport], withCompletionHandler: nil)
} else {
// User not authenticated
}
}
}