iOSのGameCenterにあるスコアボードであるLeaderboardを使った時にハマってしまったポイントを書き残します。
基本的な使い方については公式PDFを参照してください。
Leaderboardにスコアが反映されない
色々な要因が考えられます。。。
Category設定ミス
GKScore *scoreBoard = [[GKScore alloc] initWithCategory:@"HogeScore"];
GKScoreをインスタンス生成する際に用いるCategoryとは、Leaderboard IDとなります。この値がiTunes Connect上のLeaderboardsで指定したIDと異なった場合はスコアが反映されません。
Sort Order設定ミス
iTunes Connect上でLeaderboardを作成する画面にて、「Sort Order」という項目があります。これは値が高ければハイスコア、値が低ければロースコアかの判断に使われます。
- Low to High:値が低ければハイスコア扱い
- High to Low:値が高ければハイスコア扱い
値が高ければハイスコア扱いにしたいのに「Low to High」にうっかり設定しちゃうと、Leaderboardが0値から変動しなくなるという事があります。
Leaderboardのテストデータをクリアしても、前回と同じサンドボックスアカウントを使うと前回ポイントが反映される
iTunes ConnectからLeaderboardsテストデータのクリアが行えます。
が、同じサンドボックスアカウントでランキングアクセスすると削除前の値に戻ります。これはサンドボックスアカウントに紐付いている値までクリアされていないからなのでしょう…使えない。
通信不可状態でのスコア反映方法
最適な方法は分かりませんが私が行なってみた方法。
スコア反映処理前にスコアを永続保存しておく*1。スコア反映処理を行なって、成功したら保存しておいた値は消しておく。GameCenterへの認証処理時に、認証成功した場合にスコア反映処理を行う。
*1:以前に保存したスコアより大きければ保存。などとすると良いでしょう