Game Center 2歩目。非アクティブからの復帰時のGame Centerログインに対応する [Game Center初心者] [swift1.2]
お盆は家族サービスに忙しかったのです。
前回は、はじめの一歩としてGame Centerのログインを行う実装を行いました。
SwiftでのGameCenterはじめの一歩。ログインを簡単に行う [Game Center初心者向け] [Swift1.2] - MILLEN BOX
しかし上記リンクの方法では、アプリが非アクティブから復帰した際にもログイン出来ませんでした。非アクティブから復帰した際のログインの対応には、前回の処理をAppDelegateに実装しなければなりません。
今回はこれを行っていきます。参考サイトにしたサイトは以下です。
自分ポイント1
ログイン処理を別ファイルに書き出します。ファイル名は GKLocalPlayerUtil.swift です。
前回の処理に加えSandbox処理についても追加しています。(elseの部分)
// // GKLocalPlayerUtil.swift // import UIKit import GameKit struct GKLocalPlayerUtil { static var localPlayer:GKLocalPlayer = GKLocalPlayer(); static func login(target: UIViewController){ self.localPlayer = GKLocalPlayer.localPlayer() self.localPlayer.authenticateHandler = {(viewController, error) -> Void in if ((viewController) != nil) { println("LoginCheck: Failed - LoginPageOpen") target.presentViewController(viewController, animated: true, completion: nil); }else{ println("LoginCheck: Success") if (error == nil){ println("LoginAuthentication: Success") }else{ println("LoginAuthentication: Failed") } } } } }
自分ポイント2
AppDelegateにて、 自分ポイント1 で抜き出した処理を呼び出します。
記載箇所は、didFinishLaunchingWithOptions です。これはAppDelegate処理内の最後の方で呼ばれる処理みたいです。
iOS のイベント駆動をライフサイクルイベントとユーザアクションイベントにわけて理解する - A Day In The Life を参照のこと。
// // AppDelegate.swift // import UIKit import GameKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. // GameCenter Auto Login if let presentView = window?.rootViewController { let targetViewController = presentView GKLocalPlayerUtil.login(targetViewController) } return true } ... }
if let presentView = window?.rootViewController
がないと動かすことが出来なかったため、忘れずに記載して下さい。
これでバッチリ非アクティブから復帰に対応出来ました。