游戏中心断线检查漏洞
Game Center disconnection check flaw
我有一个游戏中心实时多人游戏应用程序,在检查玩家何时断开连接时存在漏洞利用。我有这个代码:
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"
}
}
}
发生的情况是,如果一名玩家进入控制中心并打开飞行模式,则 returns 对手已断开连接。有什么办法可以解决这个问题吗?
任何反馈将不胜感激
没关系,我以为调出控制中心没有调用app delegate applicationDidEnterBackground函数,应用在控制中心的时候还是运行,结果是控制中心把它放到了处于非活动状态,所以我能够处理它
我使用 iOS 可达性代码解决了这个问题。
didChangeConnectionState
只为远程连接调用。如果你断开连接(要么进入飞行模式,要么合法地失去 WIFI 连接),那么与游戏的连接就会断开,didChangeConnectionState
被称为传递给对手玩家。
使用可访问性代码,您可以查询此回调触发时您是否处于离线状态。然后你可以知道回调正在触发是因为你离线,而不是对手失去连接。
一个小问题是,有时 Reachability 调用需要一小段时间来评估,从而允许 didChangeConnectionState
调用先调用 return。为此,请在 didChangeConnectionState
呼叫触发后等待几秒钟,然后检查您的可达性结果。
史蒂夫
我有一个游戏中心实时多人游戏应用程序,在检查玩家何时断开连接时存在漏洞利用。我有这个代码:
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"
}
}
}
发生的情况是,如果一名玩家进入控制中心并打开飞行模式,则 returns 对手已断开连接。有什么办法可以解决这个问题吗?
任何反馈将不胜感激
没关系,我以为调出控制中心没有调用app delegate applicationDidEnterBackground函数,应用在控制中心的时候还是运行,结果是控制中心把它放到了处于非活动状态,所以我能够处理它
我使用 iOS 可达性代码解决了这个问题。
didChangeConnectionState
只为远程连接调用。如果你断开连接(要么进入飞行模式,要么合法地失去 WIFI 连接),那么与游戏的连接就会断开,didChangeConnectionState
被称为传递给对手玩家。
使用可访问性代码,您可以查询此回调触发时您是否处于离线状态。然后你可以知道回调正在触发是因为你离线,而不是对手失去连接。
一个小问题是,有时 Reachability 调用需要一小段时间来评估,从而允许 didChangeConnectionState
调用先调用 return。为此,请在 didChangeConnectionState
呼叫触发后等待几秒钟,然后检查您的可达性结果。
史蒂夫