2015-12-09 1 views
0

J'ai tout fait correctement en ce qui concerne iTunes Connect, mais quand je démarre l'application, il ne s'authentifie pas, et quand j'appuie sur mon bouton Gamecenter, il me donne un message "Gamecenter n'est pas disponible, utilisateur non connecté » code:SpriteKit - Impossible de se connecter à Gamecenter

ViewController:

import UIKit 
import SpriteKit 
import GameKit 

class GameViewController: UIViewController { 



    override func viewDidLoad() { 
     super.viewDidLoad() 

    authenticateLocalPlayer() 
} 

//initiate gamecenter 
    func authenticateLocalPlayer(){ 
     print("Starting..1") 
     let localPlayer = GKLocalPlayer.localPlayer() 
     print("Starting..2") 
     localPlayer.authenticateHandler = {(viewController, error) -> Void in 
      print("Starting..3") 
      if (viewController != nil) { 
       print("Not signed in. Authenticating now") 
       var vc = self.view?.window?.rootViewController 
       vc?.presentViewController(viewController!, animated: true, completion: nil) 
      } 

      else { 
       print((GKLocalPlayer.localPlayer().authenticated)) 

      } 

     } 
    } 

GameScene:

import SpriteKit 
import iAd 
import GameKit 

class GameScene: SKScene, SKPhysicsContactDelegate, ADBannerViewDelegate, GKGameCenterControllerDelegate { 

    func saveHighscore(score:Int) { 

     //check if user is signed in 
     if GKLocalPlayer.localPlayer().authenticated { 

      let scoreReporter = GKScore(leaderboardIdentifier: "CC_Leaderboard_1") //leaderboard id here 

      scoreReporter.value = Int64(score) //score variable here (same as above) 

      let scoreArray: [GKScore] = [scoreReporter] 

      GKScore.reportScores(scoreArray, withCompletionHandler: {(error : NSError?) -> Void in 
       if error != nil { 
        print("error")    } 
      }) 

     } 

    } 

    //shows leaderboard screen 
    func showLeader() { 
     var vc = self.view?.window?.rootViewController 
     var gc = GKGameCenterViewController() 
     gc.gameCenterDelegate = self 
     vc?.presentViewController(gc, animated: true, completion: nil) 
    } 

    //hides leaderboard screen 
    func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController!) 
    { 
     gameCenterViewController.dismissViewControllerAnimated(true, completion: nil) 

    } 

} 

J'ai aussi essayé de l'authentification à l'intérieur GameScene mais cela n'a pas fonctionné non plus.

Edit:

//initiate gamecenter 
    func authenticateLocalPlayer(){ 

     print("Gamecenter..1") 
     let localPlayer = GKLocalPlayer.localPlayer() 

     print("Gamecenter..2") 
     localPlayer.authenticateHandler = {(viewController, error) -> Void in 

      print("Gamecenter..3") 
      if (viewController != nil) { 
       print("Not signed in. Authenticating now") 
       var vc = self.view?.window?.rootViewController 
       vc?.presentViewController(viewController!, animated: true, completion: nil) 
      } 

      else { 
       print((GKLocalPlayer.localPlayer().authenticated)) 

      } 

     } 
    } 

Jetez un oeil à la print déclarations à la fonction ci-dessus, "Gamecenter..3" jamais faire imprimer.

Edit 2:

Le problème lui-même résolu quand j'ai signé sur GameCenter. (Quelle stupidité ce genre de choses)

+0

Avez-vous activé la section Game Center dans Capabilities dans Xcode? – Adam

+0

Oui, s'il vous plaît jeter un oeil à mon post édité. – Abdou023

+0

En mode bac à sable, si vous refusez de vous connecter 5 fois, vous ne pourrez plus vous reconnecter tant que vous n'aurez pas supprimé vos informations d'identification dans les paramètres du système de jeu, puis démarrez l'application et reconnectez-vous au – Knight0fDragon

Répondre

0

Une possibilité: Dans votre gestionnaire d'authentification, vous ne vérifiez jamais le code d'erreur. Vous vérifiez seulement si viewController est défini ou non. Cependant, si le code d'erreur est défini, viewController sera (généralement) nul, ce qui vous permettra d'interpréter une erreur de connexion comme une connexion réussie.

je changerais le code:

localPlayer.authenticateHandler = {(viewController, error) -> Void in 
    if (error != nil) 
    { 
     //add some stuff to report the error 
    } 
    else if (viewController != nil){ 
     print("Not signed in. Authenticating now") 
     var vc = self.view?.window?.rootViewController 
     vc?.presentViewController(viewController!, animated: true, completion: nil) 
    } 

    else { 
     print((GKLocalPlayer.localPlayer().authenticated)) 

     } 

    } 

pour confirmer que vous n'obtenez une erreur lors de la connexion. Si vous obtenez une erreur, cela vous donnera une idée de ce qu'il faut regarder ensuite.

Modifier

Certaines personnes rapportent des problèmes d'authentification jusqu'à ce qu'ils ajoutent au moins 1 leaderboard ou dans la réalisation iTunesConnect. Dans ces rapports, ils reçoivent une erreur de connexion indiquant que le jeu n'est pas reconnu. Mais, compte tenu de la flakiness inhérente dans le centre de jeu, j'ajouterais une réalisation d'espace réservé ou un classement pour exclure ce problème. (iOS9 “This game is not recognized by game center.”)

+0

. s'il vous plaît jeter un oeil à mon post édité. – Abdou023