如何恢复消耗品应用内购买?
Posted
技术标签:
【中文标题】如何恢复消耗品应用内购买?【英文标题】:How to restore consumable In App Purchases? 【发布时间】:2016-05-26 17:15:12 【问题描述】:我想恢复游戏的消耗品应用内购买。此游戏仅在应用购买中提供消耗品,例如:
1000 个硬币 0.99 美元 3000 个硬币 1.99 美元使用NSUserDefaults
保存金币不好,因为用户可以删除应用程序,当他们重新安装时,他们会丢失金币。 Apple 也有一个 restoreCompletedTransactions
方法,但这不适用于消耗品,因此开发人员必须对此进行跟踪。
请不要提及使用GameKit
(游戏中心)或网络服务器。还有其他解决方案吗?我读过iCloud
和Keychain
是另外两种可能的解决方案(不确定这些是否适用)。
PS:关于 SO 的许多答案已有几年的历史,对我的情况不起作用,所以我再次在这里问。
【问题讨论】:
【参考方案1】:钥匙串和 iCloud 就是您所看到的。卸载应用时,钥匙串数据也不会被删除。
GitHub上有keychain的好帮手,使用起来轻而易举。
https://github.com/jrendel/SwiftKeychainWrapper
关于数据存储的一般阅读
How secure is NSUserDefaults on ios 8,9?
要将您的数据存储在 iCloud 中,您应该对小数据使用键值存储。
我使用单例类来处理所有这些。对于一个简单的例子,看看我发布的这个答案
SpriteKit: Why does it wait one round for the score to update? (Swift)
这是基于这篇很棒的文章
https://www.raywenderlich.com/63235/how-to-save-your-game-data-tutorial-part-1-of-2
希望对你有帮助
【讨论】:
非常感谢您的回答!你会说什么是最佳解决方案?我提到了iCloud
和Keychain
,但是什么是最好的,或者他们的其他解决方案可能会更好。例如,想到的一个问题是,假设互联网不可用并且您使用 iCloud,这是否会使 iCloud 不好?
您应该同时使用两者。首先是本地数据,然后是 iCloud 数据作为备份。这样,您的应用程序也将在所有平台上同步。检查最后一个链接
好的,我明白了,所以使用 NSUserDefaults
和 iCloud
。那你会说这比KeyChain
好吗?如果是,为什么会这样?
不,我使用钥匙串和 iCloud。然而,有时尝试保存到钥匙串会失败,所以我会使用用户默认设置,直到下一次钥匙串保存,然后我将其删除。这一步只是为了更加确定,但不是必需的。你永远不应该在 NSUserdefaults 中存储敏感数据。
嘿 Eric,对不起,我使用了 iOS 应用程序,虽然我写的是评论而不是答案。以上是关于如何恢复消耗品应用内购买?的主要内容,如果未能解决你的问题,请参考以下文章