游戏中心断线检查缺陷

时间:2016-01-11 16:32:52

标签: ios swift game-center

我有一个游戏中心实时多人游戏应用程序,并且在检查玩家何时断开连接时有一个漏洞。我有这段代码:

func match(match: GKMatch!, player player: GKPlayer!, didChangeConnectionState state: GKPlayerConnectionState){
    println("called")
    if(state==GKPlayerConnectionState.StateConnected){
        println("connected")
    }
    if(state==GKPlayerConnectionState.StateDisconnected){
        println("Disconnected")
    }
    if(state==GKPlayerConnectionState.StateUnknown){
        println("unknown")
    }
    println(player.displayName)
    if(state == GKPlayerConnectionState.StateDisconnected){
        if(player.playerID == GKLocalPlayer.localPlayer().playerID){
            Label.text = "You Disconnected"
        }
        else{
            Label.text = "Your opponent disconnected"
        }
    }


}

如果一名玩家进入控制中心并开启飞行模式,则会返回对手断开连接的情况。有什么方法可以解决这个问题吗?

任何反馈都将非常感激

2 个答案:

答案 0 :(得分:0)

没关系,我认为,因为启动控制中心没有调用app委托applicationDidEnterBackground函数,应用程序在控制中心仍在运行,但事实证明控制中心将其置于非活动状态,所以我能够处理它

答案 1 :(得分:0)

我使用iOS Reachability代码解决了这个问题。

didChangeConnectionState仅用于远程连接。如果你断开连接(无论是进入飞行模式,还是合法地失去WIFI连接),那么与游戏的连接就会中断,并且didChangeConnectionState被称为传递给对手的玩家。

使用可访问性代码,您可以查询此回调触发时是否处于脱机状态。然后你可以告诉你回调是因为你离线了,而不是对手失去联系。

一个小问题是,有时候可达性调用需要花一点时间来评估,允许didChangeConnectionState调用先返回。为实现此目的,请在didChangeConnectionState来电之后几秒钟,然后检查您的可达性结果。

史蒂夫。