ホーリーのプログラミング日記

ホーリーのプログラミング日記

エキセントリック・スーパーアプリクリエイター / アプリ総DL数 約180万 / 全然分からない 俺は雰囲気でアプリを作ってる / iOS : apple.co/3m3HxSm / Android : bit.ly/3ma0liZ

Swiftでアプリにランキング機能を実装してみた

 

f:id:gevvoihorry:20160816060451j:plain

 

アプリにランキング機能を実装すると、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でアプリにランキング機能を実装してみた、の話でした。