アプリにランキング機能を実装すると、iPhoneの「GameCenter」ってアプリで全プレイヤーのランキングが見れるようになります。
確か僕がこの機能を初めて実装したのは、確か「パワハラ上司をどつき回せ」ってアプリだったと思います。
初めてだと、その方法が分かりにくいと思うので、自分が参考にしたサイトなんかを紹介しながら、ちょっと書いてみようと思います。
参考にしたサイトは2つ
参考にしたサイトは2つ。んで、片方は4回に分けて書いてあったので、全部で5ページですね。それらを見ながら実装しました。
基本的にはここを見ながら書きまして。
GameCenterを用いたオンラインスコア対応手順: かえるの覚書
細かいところはこちらを参考にさせていただきました。
Swift: Game Center の Leaderboard を設定する | Siro:chro
Swift: Game Center の Leaderboard へスコアを送信する | Siro:chro
ITunes Connect: Game Center の Achievement を設定する | Siro:chro
Swift: Game Center へ Achievement を送信する | Siro:chro
まずはアプリを提出中にする
とりあえず作ってるアプリを提出準備中にして、iTunesConnectでGameCenterの設定をするんです。
んで、xcodeのシュミレーターで使えるようにテストプレイヤーの設定、それから実際にコードを書くって流れになります。
もうここを見ればほぼ問題ないですね。
あとから設定も変えられるみたいなんで、これを参考にビシバシやってみてください。
GameCenterを用いたオンラインスコア対応手順: かえるの覚書
(いや、ほんとマジで助かりました。このサイトの管理人さん、ありがとうございます!!)
2箇所エラーが出た
強いて言うなら、2箇所ほどエラーが出たんですよね。
まあやれば勝手に解決できるでしょうが、ここです。
//達成項目
func reportAchivement(sendScore: Int) {
let ids = getAchievementId(sendScore)
var achievements: [GKAchievement] = Array<gkachievement>()
for achivementId in ids {
let achievement: GKAchievement = GKAchievement()
achievement.identifier = achivementId
achievement.percentComplete = 100
achievements.append(achievement)
}
if achievements.count != 0 {
GKAchievement.reportAchievements(achievements, withCompletionHandler: {(error) -> Void in
if error != nil {
print(error!.description)
}
})
}
}
//達成状況によって達成項目のID配列を戻す
func getAchievementId(sendScore: Int) -> [String] {
var ids: [String] = Array<string>()
if sendScore >= 100 {
ids.append(ACHIVEMENT_ID_100)
}
return ids
}
赤字で書いたところがエラーになっちゃいました。
でもこれは消すだけで大丈夫でしたね。
そんな感じです。
純粋にランキングだけ出すのなら、「達成項目」はいらない
純粋にそのゲームのランキングを出したいのなら、達成項目って機能はいらないと思います。
これはゲーム内で何回なにをしたとか、そういう機能ですからね。僕もパワハラ以降はこの機能を使っていません。
iOS10からGameCenterの機能が廃止されるかもしれない
噂ではiOS10からGameCenterの機能が廃止されるとか何とか。まあこれ、みんなそんなに見てないのかもしれないですね。僕も自分でアプリを作り始める前は、全然見てなかったですから。
最後に
一度やってみると簡単、でもその一回目が難しい。
ランキング機能の実装は、こんな手順で行いました。
以上、Swiftでアプリにランキング機能を実装してみた、の話でした。