如何恢复消耗品应用内购买?

Posted

技术标签:

【中文标题】如何恢复消耗品应用内购买?【英文标题】:How to restore consumable In App Purchases? 【发布时间】:2016-05-26 17:15:12 【问题描述】:

我想恢复游戏的消耗品应用内购买。此游戏仅在应用购买中提供消耗品,例如:

1000 个硬币 0.99 美元 3000 个硬币 1.99 美元

使用NSUserDefaults 保存金币不好,因为用户可以删除应用程序,当他们重新安装时,他们会丢失金币。 Apple 也有一个 restoreCompletedTransactions 方法,但这不适用于消耗品,因此开发人员必须对此进行跟踪。

请不要提及使用GameKit(游戏中心)或网络服务器。还有其他解决方案吗?我读过iCloudKeychain 是另外两种可能的解决方案(不确定这些是否适用)。

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

希望对你有帮助

【讨论】:

非常感谢您的回答!你会说什么是最佳解决方案?我提到了iCloudKeychain,但是什么是最好的,或者他们的其他解决方案可能会更好。例如,想到的一个问题是,假设互联网不可用并且您使用 iCloud,这是否会使 iCloud 不好? 您应该同时使用两者。首先是本地数据,然后是 iCloud 数据作为备份。这样,您的应用程序也将在所有平台上同步。检查最后一个链接 好的,我明白了,所以使用 NSUserDefaultsiCloud。那你会说这比KeyChain好吗?如果是,为什么会这样? 不,我使用钥匙串和 iCloud。然而,有时尝试保存到钥匙串会失败,所以我会使用用户默认设置,直到下一次钥匙串保存,然后我将其删除。这一步只是为了更加确定,但不是必需的。你永远不应该在 NSUserdefaults 中存储敏感数据。 嘿 Eric,对不起,我使用了 iOS 应用程序,虽然我写的是评论而不是答案。

以上是关于如何恢复消耗品应用内购买?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确恢复应用内购买?

应用内购买消耗品自动恢复

恢复应用内购买

如何在 iOS 中取消或退款已购买的消耗品应用内购买?

尽管没有登录 iTunes 帐户,iOS 仍会恢复应用内购买

尽管没有iTunes帐户登录,iOS仍会恢复应用内购买