我正在制作一个应用,其中有书籍,书籍有音频和视频服务。
客户希望应用内购买。
以下是应用内的工作方式。
如果用户想购买这本书,用户将购买这本书,一旦交易完成,将自动下载 zip 文件(从我为书添加图像、视频、音频的服务器)。
一旦我有 zip,我会在下载完成后解压缩它。
对我来说,问题是如何确定用户 xyz 之前是否购买过这本书。
例如今天用户 A 为图书 B 付款。如何获取用户 A 购买图书的信息?
如果我有用户注册系统,我可以通过我的系统的用户 ID 来识别用户。
有人说,把书的 id 保存在 NSUserDefaults 中,但担心如果我删除应用并重新安装,我应该免费下载书 B。
我只是想知道,我怎样才能跟踪哪个用户下载了哪本书。
我正在为 iOS 6 和 7 制作应用程序
Best Answer-推荐答案 strong>
编辑:
您的应用通过调用 SKPaymentQueue 的 restoreCompletedTransactions 方法来启动该流程。这会向 App Store 发送一个请求,以恢复您应用的所有已完成交易。如果您的应用为其支付请求的 applicationUsername 属性设置了一个值,如“检测不规则事件”中所述,请使用 restoreCompletedTransactionsWithApplicationUsername: 方法在恢复交易时提供相同的信息。
App Store 会为之前完成的每笔交易生成一个新交易。恢复的交易具有对原始交易的引用:SKPaymentTransaction 的实例具有 originalTransaction 属性,并且收据中的条目具有 Original Transaction Identifier 字段。
您的事务队列观察器被调用,状态为 SKPaymentTransactionStateRestored ,用于每个恢复的事务,如“等待 App Store 处理事务”中所述。您此时采取的操作取决于您应用的设计。
- 如果您的应用使用应用收据并且没有 Apple 托管
内容,不需要此代码,因为您的应用无法恢复
已完成的交易。立即完成所有恢复的交易。
- 如果您的应用使用应用收据并包含 Apple 托管的内容,请让
用户在开始之前选择要恢复的产品
恢复过程。在恢复过程中,重新下载
用户选择的内容并立即完成任何其他交易
.
NSMutableArray *productIDsToRestore = <# From the user #>;
SKPaymentTransaction *transaction = <# Current transaction #>;
if ([productIDsToRestore containsObject:transaction.transactionIdentifier]) {
// Re-download the Apple-hosted content, then finish the transaction
// and remove the product identifier from the array of product IDs.
} else {
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}
Source
关于ios - 如何了解我是否已经为应用内购买付款,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/22730534/
|