想象用户正在玩时没有互联网连接。分数无法提交给游戏中心。但是我也使用NSUserDefaults在手机上保存了高分。
因此,当用户下次播放并连接到游戏中心时,我应该同步这个分数,他是否实现了“离线”播放?
这是一个好习惯吗?
答案 0 :(得分:5)
根据Apple Game Center文档,答案是肯定的。
确保您的游戏在网络失败后再次发送数据
当您实施排行榜或成就时,您的游戏会报告一个 玩家的分数或成就进展到游戏中心。然而, 网络永远不可靠。如果发生网络错误, 您的游戏应该保存Game Kit对象并再次重试该操作 晚些时候。 GKScore和GKAchievement课程都支持 NSCoding协议,因此您的游戏可以存档这些对象 进入后台。
设置一个缓存,保存您的分数数据(我使用NSUserDefaults)以保持会话之间的数据,并且经常(例如,每次用户进入应用程序时)测试以查看Game Center是否可访问,如果是,上传你的缓存分数。如果您需要任何代码,请告诉我 - 这篇文章很老了,所以如果没有人回答我也不会感到惊讶:)
答案 1 :(得分:4)
此外,根据iOS 5.0及更高版本的Apple文档,网络错误相关问题由后台报告任务处理,因此如果不支持以前的iOS版本,开发人员无需编写任何内容来处理此问题。
(来自GKScore Class Reference for method reportScoreWithCompletionHandler:)
如果错误是网络错误且您的游戏在iOS 4.3或更早版本上运行,您的游戏应定期尝试报告进度,直到成功报告得分。在iOS 5.0及更高版本中,后台报告任务会自动代表您的游戏处理网络错误。
如果没有人登录游戏中心(没有网络相关/提交问题),当达到高分然后有人稍后登录时,我不确定应该发生什么。在这种情况下,甚至不能创建GKScore对象,因为没有经过身份验证的播放器,因此无论何时下一个人登录Game Center,都无法知道谁实际获得了分数。似乎处理登录(即使暂时没有网络连接)也是最佳做法,但如果没有人登录并且获得高分则那么这只是运气不好因为不知道谁赢了它,除了将其保存为设备高分。如果有人处理那个案子,那么请告诉。
答案 2 :(得分:2)
好问题。
在我看来,如果用户处于离线状态且仍在播放,则他/她得分应该在本地保存。当他/她再次出现在线时,不应在线提交离线分数。因为如果提交了离线分数,则使在线游戏的目的失败。