Apple の Game Center を使って iOS のゲームアプリを設計すれば、ゲームスコアやアチーブメントをサーバーへ送信し、プレイヤーのスコアを元にランキングを表示することが出来ます。
以下の4回に分けて、iTunes Connect の設定や Swift のスコア送信の実装を、説明していきたいと思います。
- iTunes Connect: Game Center の Leaderboard を設定する
- Swift: Game Center の Leaderboard へスコアを送信する
- iTunes Connect: Game Center の Achievement を設定する
- Swift: Game Center へ Achievement を送信する
今回は Swift で Game Center の Leaderboard へスコアの送信を行います。
※この説明は Xcode で アプリが開発されていること、iTunes Connect で新規 iOS App の作成までは完了していることを前提としています。
手順の概要
Swift から Leaderboard へスコアを送信する概要は以下の通りとなります。
各手順の詳しい内容に関しては、次項で説明したいと思います。
必要な Swift ファイル
- AppDelegate.swift
- ViewController.swift
手順の概要
- Xcode > GameKit.Framework の追加
- Xcode > プロジェクトで Game Center を ON にする
- Swift > Game Center へログインする
- Swift > スコア送信メソッドを記述する
- Swift > スコア送信メソッドをコールする
Game Center の Leaderboard へスコアを送信する
前回 iTunes Connect: Game Center の leaderboard を設定する で作成した iTunes Connect の Leaderboard ID を使用し Swift からスコアの送信を行いたいと思います。
Xcode > GameKit.Framework の追加
Project > General > Linked Frameworks and Libraries の「+」をクリックし、GameKit.Framework を追加します。
Xcode > プロジェクトで Game Center を ON にする
Project > General > Capabillities > Game Center を ON にします。
Game Center へログインする
AppDelegate.swift に GameKit をインポートし の func application didFinishLaunchingWithOptions に Game Center のログイン処理を記述します。
ここで Game Center のログイン処理を行えば、アプリが起動する毎に Game Center のログインがチェックされるようになります。
AppDelegate.swift
[code]
import UIKit
import GameKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// GameCenter Login
if let presentView = window?.rootViewController {
let target = presentView
let player = GKLocalPlayer.localPlayer()
player.authenticateHandler = {(viewController, error) -> Void in
if ((viewController) != nil) {
println(“GameCenter Login: Not Logged In > Show GameCenter Login”)
target.presentViewController(viewController, animated: true, completion: nil);
} else {
println(“GameCenter Login: Log In”)
if (error == nil){
println(“LoginAuthentication: Success”)
} else {
println(“LoginAuthentication: Failed”)
}
}
}
}
return true
}
}
[/code]
ビルドし確認します。Game Center へログインしていない場合、ログイン画面が表示されます。
スコア送信メソッドを記述する
ViewController に GameKit をインポートし、スコアを送信するメソッドを記述します。
ViewController.swift
[code]
func reportScore(value: Int, leaderboardId: String) {
var score: GKScore = GKScore()
score.value = Int64(value)
score.leaderboardIdentifier = leaderboardId
var scoreArr:[GKScore] = [score]
GKScore.reportScores(scoreArr, withCompletionHandler:{(error:NSError!) -> Void in
if((error != nil)) {
println(“ReportScore: Error”)
} else {
println(“ReportScore: Success”)
}
})
}
[/code]
スコア送信メソッドをコールする
ViewController の viewDidLoad から 上記のメソッドを呼び出します。ViewController.swift の全ソースは以下のようになります。
ViewController.swift
[code]
import UIKit
import GameKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
reportScore(100, leaderboardId: “your leaderboard ID”)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func reportScore(value: Int, leaderboardId: String) {
var score: GKScore = GKScore()
score.value = Int64(value)
score.leaderboardIdentifier = leaderboardId
var scoreArr:[GKScore] = [score]
GKScore.reportScores(scoreArr, withCompletionHandler:{(error:NSError!) -> Void in
if((error != nil)) {
println(“ReportScore: Error”)
} else {
println(“ReportScore: Success”)
}
})
}
}
[/code]
以上で Swift から Game Center へスコアを送信する説明は完了です。今回 viewDidLoad に記述した送信メソッドを、任意のタイミングで呼び出せば、様々なアプリで流用が可能です。
まとめ
Leaderboard のスコアは点数だけではなく、タイムやアプリ内のユニークな数値に対しても有効です。
注意すべき点は、Game Center へのスコアの反映は、サーバーのトラフィックにより早い時は数秒、遅いと数十分かかる場合があります。
ですので、まずはローカル上のデータベース(もしくはユーザーデフォルト等)にスコアを保存し、Game Center なしでアプリが機能することを確認してから Game Center を実装する という手順を守る必要があります。
次回は Game Center の Achievement を設定する方法を説明したいと思います。
本投稿のサンプルで使用している iOS ゲームアプリ SQN では Game Center の Leaderboard を使って、ハイスコアとタイムを送信しています。
SQN は完全無料ですので、よかったらダウンロードして遊んでみてください。
↓SQN のダウンロードはこちらから
SQN はユニバーサルアプリなので、すべての iOS デバイス(※) でお楽しみいただけます。
※iOS 8.0 以降がインストールされているデバイスが対象となります。
この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。