Game Center 기능 설치

18824 단어 SwiftSpriteKitiOS
스위프트에 게임 센터 기능을 설치하는 데 대한 정보가 적기 때문에 총괄한다.
이번에는 가장 좋은 시간을 보내는 기능을 실현해 보자.

대략적인 절차

  • iTunes Connect에 애플리케이션을 등록합니다.
  • iTunes Connect를 통해 Game Center 기능을 효율적으로 사용할 수 있습니다.
  • X코드로 점수 발송 기능 등을 구현한다.
  • 동작 확인을 진행한다.
  • iTunes Connect에 등록


  • 액세스iTunes Connect 및 로그인.
  • 내 App을 누릅니다.
  • 신규 iOS App 키를 눌러 애플리케이션을 등록합니다.
  • 게임 센터 기능의 효율화 및 리더보드 제작

  • 어플리케이션 상세 페이지에서 게임 센터 레이블을 열고 단일 게임의 유효성을 누릅니다.
  • 키를 눌러 Leader Board를 추가합니다.
  • 각 항목에 입력하고 대응하는 언어에 대한 접두사 등을 입력한다.

  • Game Center는 적용된 세부 정보 입력 화면에서 유효합니다.
  • Xcode 설정

  • GameKit.Framewor(General Linked Frameworks 및 Libraries) 추가
  • GameKit 추가
  • 분수 발송 기능의 실현


    로그인 기능의 구축


    앱이 시작될 때 앱 Delegate로 불리는'd i d F inish Launching With Options'에 기술된 로그인 처리를 통해 앱은 비활성 상태에서 복구된 후에도 제대로 로그인해야 한다.
    ※ 스위프트 직장인 소스를 빌렸어요.
    AppDelegate.swift
    import UIKit
    
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window: UIWindow?
    
        func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    
            window = UIWindow(frame: UIScreen.mainScreen().bounds)
            if let window = window{
                window.backgroundColor = UIColor.whiteColor()
                window.rootViewController = ViewController()
                window.makeKeyAndVisible()
            }
            // GameCenter Auto Login
            if let presentView = window?.rootViewController {
                let targetViewController = presentView
                GKLocalPlayerUtil.login(targetViewController)
            }
            return true
        }以下略
    
    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")
                    }
                }
            }
        }
    }
    
    다음 로그인 페이지를 표시하면 성공합니다.

    분수 발송 기능의 실현


    'Elapsed Time-To the Hundredth of a Second'를 선택했기 때문에 다음과 같습니다.
    GameScene.swift
    // Time Interval
    self.startDate = NSDate() // StartDate
    self.time = NSDate().timeIntervalSinceDate(self.startDate) // Elapsed Time
    self.clearTime = self.time // Clear Time
    
    // GameCenter Score Transration
    var leaderBoardScore = Int(omitTime(self.clearTime) * 100) // Elapsed Time
    GKScoreUtil.reportScore(leaderBoardScore, leaderboardid: gameMode)
    
    func omitTime(time: Double) -> Double {
        return Double(Int(time * 100)) / 100
    }時間関連の処理を一部抜粋
    
    
    
    GKScoreUtil.swift
    import UIKit
    import GameKit
    
    struct GKScoreUtil {
        static 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 NG")
                }else{
                    println("ReportScore OK")
                }
            })
        }
    }
    

    점수 확인 기능의 실현


    GameScene.swift
    // LeaderBoard
    var localPlayer = GKLocalPlayer()
    let navigationController = self.view?.window?.rootViewController as UINavigationController
    
    if let vc = navigationController.visibleViewController as? ViewController {
        localPlayer.loadDefaultLeaderboardIdentifierWithCompletionHandler({ (leaderboardIdentifier : String!, error : NSError!) -> Void in
            if error != nil {
                println(error.localizedDescription)
            } else {
                let gameCenterController:GKGameCenterViewController = GKGameCenterViewController()
                gameCenterController.gameCenterDelegate = vc
                gameCenterController.viewState = GKGameCenterViewControllerState.Leaderboards
                gameCenterController.leaderboardIdentifier = self.gameMode
                vc.presentViewController(gameCenterController, animated: true, completion: nil)
            }
        })
    }
    

    동작 확인


    샌드박스 사용자 생성

  • iTunes Connect에 로그인하여 사용자와 역할을 선택합니다.
  • Sandbox 테스트기를 선택하여 테스트기를 제작한다.
    이때 계정마다 메일 주소가 필요하기 때문에 Gmail의 별명 기능(+tester1)으로 등록하는 것이 좋을 수 있습니다.
  • 실기나 시뮬레이터의 동작을 확인하다

  • Settings-Game Center에서 방금 만든 사용자로 로그인하여 Sandbox에서 선택하십시오.
  • 어플리케이션을 시작하면 화면 위에 WelcomBack 정보가 표시됩니다.
  • 점수 전송 처리 후 LeaderBoard를 시작하면 다음 화면이 성공적으로 표시됩니다.
  • 참고 자료


    Swift 직장인-게임센터의 GKLocal Player 로그인 인증

    좋은 웹페이지 즐겨찾기