swift - SpriteKit - 无法登录 Gamecenter

标签 swift sprite-kit game-center

关于 itunes connect,我做的一切都是正确的,但是当我启动应用程序时,它不会进行身份验证,当我按下 Gamecenter 按钮时,它会向我显示一条消息“Gamecenter 不可用,用户未登录” 代码:

View Controller :

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))

            }

        }
    }

游戏场景:

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)

    }

}

我还尝试在 GameScene 内进行身份验证,但这也不起作用。

编辑:

 //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))

            }

        }
    }

看看上面函数中的 print 语句,“Gamecenter..3”永远不会被打印。

编辑2:

当我退出 Gamecenter 时,问题自行解决。 (这种事多蠢啊)

最佳答案

一种可能性:在您的身份验证处理程序中,您从不检查错误代码。您只需检查 viewController 是否已设置。但是,如果设置了错误代码,则 viewController 将(通常)为零,因此您可以将登录错误解释为成功登录。

我会将代码更改为:

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))

        }

   }

确认您在登录时没有收到错误。如果您收到错误,这将提供下一步要查看的内容的线索。

编辑

有些人报告身份验证问题,直到他们在 iTunesConnect 中添加至少 1 个排行榜或成就。在这些报告中,他们实际上收到了游戏无法识别的登录错误。但是,考虑到游戏中心固有的脆弱性,我会添加一个占位符成就或排行榜来排除该问题。 (iOS9 “This game is not recognized by game center.”)

关于swift - SpriteKit - 无法登录 Gamecenter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34184308/

相关文章:

json - Swift - JSON 数组值

ios - Swift - 带有元组数组的字典

ios - SpriteKit - 安全区域布局 Iphone X

objective-c - 如果用户尚未登录,Game Center身份验证会使我的应用程序崩溃

Swift 在运行时评估错误的条件

ios - 卡里斯塔 OBD ||与 iOS 设备的设备通信

ios - SKLabelNode 不尊重 zPosition?

swift - SpriteKit Swift 2 Action : spawning enemy waves

xcode - Game Center 未使用 Swift 进行身份验证

sandbox - 有没有办法重置我的 GameCenter 沙盒帐户的成就进度?