2015-12-22 29 views
5

Attualmente ho Game Center che funziona con il mio target iOS, ma non funziona nel target tvOS.Game Center in tvOS non viene visualizzato

Ho già aggiunto le immagini classifica e messo l'identificatore in Xcode qui:

enter image description here

Questa è la classe che sto usando per far apparire la classifica e avviare il lettore. Si chiama GameKitHelper.swift:

import UIKit 
import Foundation 
import GameKit 

let PresentAuthenticationViewController = "PresentAuthenticationViewController" 

class GameKitHelper: NSObject { 

    static let sharedInstance = GameKitHelper() 


    var authenticationViewController: UIViewController? 
    var gameCenterEnabled = false 

    func authenticateLocalPlayer() { 

    //1 
    let localPlayer = GKLocalPlayer() 
    localPlayer.authenticateHandler = {(viewController, error) in 

     if viewController != nil { 
      //2 
      self.authenticationViewController = viewController 

       NSNotificationCenter.defaultCenter().postNotificationName(PresentAuthenticationViewController, object: self) 
     } 
    else if error == nil { 
      //3 
      self.gameCenterEnabled = true 
     } 
    } 

} 

func reportAchievements(achievements: [GKAchievement], errorHandler: ((NSError?)->Void)? = nil) { 
    guard gameCenterEnabled else { 
     return 
    } 

    GKAchievement.reportAchievements(achievements, withCompletionHandler: errorHandler) 
} 

func showGKGameCenterViewController(viewController: UIViewController) { 
    guard gameCenterEnabled else { 
     return 
    } 

    //1 
    let gameCenterViewController = GKGameCenterViewController() 

    //2 
    gameCenterViewController.gameCenterDelegate = self 

    //3 
    viewController.presentViewController(gameCenterViewController, animated: true, completion: nil) 
} 

    func saveHighScore(identifier: String, score: Int) { 

    if (GKLocalPlayer.localPlayer().authenticated) { 

     let scoreReporter = GKScore(leaderboardIdentifier: identifier) 
     scoreReporter.value = Int64(score) 

     let scoreArray:[GKScore] = [scoreReporter] 

     GKScore.reportScores(scoreArray, withCompletionHandler: { 

      error -> Void in 

      if (error != nil) { 

       print("error") 
      } 
      else { 

       print("Posted score of \(score)") 
      } 
     }) 
    } 
    } 
} 

extension GameKitHelper: GKGameCenterControllerDelegate { 
    func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController) { 
    gameCenterViewController.dismissViewControllerAnimated(true, completion: nil) 
} 
} 

classe navigationController:

override func viewDidLoad() { 
    super.viewDidLoad() 

    NSNotificationCenter.defaultCenter().addObserver(self, 
              selector: Selector("showAuthenticationViewController"), 
               name: PresentAuthenticationViewController, 
               object: nil) 
    GameKitHelper.sharedInstance.authenticateLocalPlayer() 
} 

func showAuthenticationViewController() { 
    let gameKitHelper = GameKitHelper.sharedInstance 

    if let authenticationViewController = gameKitHelper.authenticationViewController { 
     topViewController?.presentViewController(authenticationViewController, 
               animated: true, 
               completion: nil) 
    } 
    } 


    deinit { 
     NSNotificationCenter.defaultCenter().removeObserver(self) 
    } 
+0

Puoi aggiungere qualche informazione in più? Hai controllato che l'inizializzazione dell'utente abbia avuto successo e che gameCenterEnabled sia vero? – Stefan

+0

@Stefan Controllare 'func authenticateLocalPlayer()'. Inoltre, ho un'altra classe che esegue un codice Game Center, ma sono abbastanza sicuro che la classe che ho pubblicato sia la classe principale. Come ho detto, questo funziona bene su iOS. Sono persino in grado di pubblicare punteggi migliori, ma non su tvOS. – Paul

risposta

0

Assicurarsi di avere un "Apple TV Cruscotto Immagine" nel catalogo di asset della tua app. La grafica del dashboard dovrebbe essere 923x150 con trasparenza e non è necessario che sia sovrapposta poiché l'utente non può selezionarla.

Il tvOS Human Interface Guidelines afferma che la grafica del dashboard è facoltativa, ma nella mia esperienza GKGameCenterViewController si rifiuterà di apparire se non ne possiedi uno.

Problemi correlati