6

ゲームセンターでハイスコアを報告しようとしています。コードは機能していると思いますが、ゲーム センターがハイスコアで更新されていません。リーダーボードは、この参照名「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()
                        })
                }
             }
        }
}

アイデアはありますか?

4

2 に答える 2

3

アプリ ID をリーダーボード識別子に追加することをお勧めします。それまでは動かなくて困っていました。あなたも同じように悩んでいるかもしれません。「com.whateverName.55009943」という名前のテスト リーダーボードを作成し、コードを更新します。それが私のように機能するかどうかを確認してください。

サンドボックス テスターに​​ Test Flight を使用している場合は、それらを iTunes Connect にも追加してください。

最後に、このリンクは、上記のアドバイスに従った場合にリーダーボードに誰も表示されない理由のトラブルシューティングに役立ちます.

于 2014-12-07T01:13:28.440 に答える
0

この github リポジトリでこのロジックを確認できます 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 } } }

于 2014-12-05T05:19:24.530 に答える