Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS游戏中存储高分的安全方法?_Ios_Swift_Sprite Kit - Fatal编程技术网

iOS游戏中存储高分的安全方法?

iOS游戏中存储高分的安全方法?,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我正在开发一个游戏,它几乎完成了,所以我必须在本地存储用户的高分。在游戏中存储高分最安全的方法是什么?一些人认为,NSUserDefaults不是一种安全的方式,因为用户可以操纵自己的高分,例如越狱 我是Spritekit编程的新手,所以请您建议存储高分的最佳方法,不要太复杂。如果你也提供一个例子,那就太好了,否则就好了 谢谢您无法保护您的分数免受越狱用户的攻击。因为他们有时甚至可以在上传到游戏中心之前操纵高分 此外,努力也必须与结果相匹配。您可以制作一个CoreData数据库来保存三个数字。但

我正在开发一个游戏,它几乎完成了,所以我必须在本地存储用户的高分。在游戏中存储高分最安全的方法是什么?一些人认为,NSUserDefaults不是一种安全的方式,因为用户可以操纵自己的高分,例如越狱

我是Spritekit编程的新手,所以请您建议存储高分的最佳方法,不要太复杂。如果你也提供一个例子,那就太好了,否则就好了


谢谢

您无法保护您的分数免受越狱用户的攻击。因为他们有时甚至可以在上传到游戏中心之前操纵高分

此外,努力也必须与结果相匹配。您可以制作一个CoreData数据库来保存三个数字。但这将是一种过度的杀伤力。您必须编写大量代码才能保存一个数字

所以我认为对于大多数没有复杂系统的游戏来说,使用NSUserDefaults是可以的

因此,我将保持它的简单性,并使用
NSUserDefaults

func saveHighscore(highscore:Int){

    //Check if there is already a highscore
    if let currentHighscore:Int = NSUserDefaults.standardUserDefaults().valueForKey("highscore") as? Int{
        //If the new highscore is higher then the current highscore, save it.
        if(highscore > currentHighscore){
            NSUserDefaults.setValue(highscore, forKey: "highscore")
        }
    }else{
        //If there isn't a highscore set yet, every highscore is higher then nothing. So add it.
        NSUserDefaults.setValue(highscore, forKey: "highscore")
    }
}

你不能保护你的分数免受越狱用户的攻击。因为他们有时甚至可以在上传到游戏中心之前操纵高分

此外,努力也必须与结果相匹配。您可以制作一个CoreData数据库来保存三个数字。但这将是一种过度的杀伤力。您必须编写大量代码才能保存一个数字

所以我认为对于大多数没有复杂系统的游戏来说,使用NSUserDefaults是可以的

因此,我将保持它的简单性,并使用
NSUserDefaults

func saveHighscore(highscore:Int){

    //Check if there is already a highscore
    if let currentHighscore:Int = NSUserDefaults.standardUserDefaults().valueForKey("highscore") as? Int{
        //If the new highscore is higher then the current highscore, save it.
        if(highscore > currentHighscore){
            NSUserDefaults.setValue(highscore, forKey: "highscore")
        }
    }else{
        //If there isn't a highscore set yet, every highscore is higher then nothing. So add it.
        NSUserDefaults.setValue(highscore, forKey: "highscore")
    }
}


NSUserDefaults将是最简单的,否则使用coreDataNSKeyed[Un]Archiver可以使用,您有一个gameData对象,它被编码并写入应用程序包中的文件。对于越狱设备,这不是一个可解决的问题。你可以做一些简单的事情来混淆(隐藏)它。你可以做一些复杂的事情。两者都会被破坏(所以简单通常更好)。关于这个问题的其他版本之前有很多讨论:使用游戏中心-存储是尽可能安全的,但当然,您实际发送的内容可能已经被篡改了。你将永远面临的问题。NSUserDefaults将是最简单的,否则可以使用coreDataNSKeyed[Un]Archiver,你有一个gameData对象,该对象被编码并写入应用程序包中的文件。对于越狱设备,这不是一个可解决的问题。你可以做一些简单的事情来混淆(隐藏)它。你可以做一些复杂的事情。两者都会被破坏(所以简单通常更好)。关于这个问题的其他版本之前有很多讨论:使用游戏中心-存储是尽可能安全的,但当然,您实际发送的内容可能已经被篡改了。你将永远面临的问题。首先,谢谢你的回答。我的另一个问题是,例如,如果我想保存用户收集的硬币总数,你认为我也应该使用NSUserDefaults吗?当然。我将补充一个解释。但简而言之:如果是一些简单的东西,比如一些数字,请将其存储在NSUserdefaults中。我已经添加了解释。如果这回答了你的问题,那么如果你能通过点击左边的勾号来接受这个问题,这样其他人就能更容易地找到答案,那就太好了。我明白了。谢谢我会接受的,但在else声明中,我不明白您为什么要在NSUserDefaults中保存高分?else语句不是只有在当前分数低于highscore时才运行吗?如果是,它不应该保存分数,对吗?不。正如您所看到的,If检查高分是否大于当前分数是嵌套的If。“else”表示第一个if。首先,谢谢你的回答。我的另一个问题是,例如,如果我想保存用户收集的硬币总数,你认为我也应该使用NSUserDefaults吗?当然。我将补充一个解释。但简而言之:如果是一些简单的东西,比如一些数字,请将其存储在NSUserdefaults中。我已经添加了解释。如果这回答了你的问题,那么如果你能通过点击左边的勾号来接受这个问题,这样其他人就能更容易地找到答案,那就太好了。我明白了。谢谢我会接受的,但在else声明中,我不明白您为什么要在NSUserDefaults中保存高分?else语句不是只有在当前分数低于highscore时才运行吗?如果是,它不应该保存分数,对吗?不。正如您所看到的,If检查高分是否大于当前分数是嵌套的If。“else”表示第一个if。我将补充评论。