OGeek|极客世界-中国程序员成长平台

标题: ios - 如何了解我是否已经为应用内购买付款 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 21:03
标题: ios - 如何了解我是否已经为应用内购买付款

我正在制作一个应用,其中有书籍,书籍有音频和视频服务。

客户希望应用内购买。

以下是应用内的工作方式。

如果用户想购买这本书,用户将购买这本书,一旦交易完成,将自动下载 zip 文件(从我为书添加图像、视频、音频的服务器)。

一旦我有 zip,我会在下载完成后解压缩它。

对我来说,问题是如何确定用户 xyz 之前是否购买过这本书。

例如今天用户 A 为图书 B 付款。如何获取用户 A 购买图书的信息?

如果我有用户注册系统,我可以通过我的系统的用户 ID 来识别用户。

有人说,把书的 id 保存在 NSUserDefaults 中,但担心如果我删除应用并重新安装,我应该免费下载书 B。

我只是想知道,我怎样才能跟踪哪个用户下载了哪本书。

我正在为 iOS 6 和 7 制作应用程序



Best Answer-推荐答案


编辑:

您的应用通过调用 SKPaymentQueue 的 restoreCompletedTransactions 方法来启动该流程。这会向 App Store 发送一个请求,以恢复您应用的所有已完成交易。如果您的应用为其支付请求的 applicationUsername 属性设置了一个值,如“检测不规则事件”中所述,请使用 restoreCompletedTransactionsWithApplicationUsername: 方法在恢复交易时提供相同的信息。 App Store 会为之前完成的每笔交易生成一个新交易。恢复的交易具有对原始交易的引用:SKPaymentTransaction 的实例具有 originalTransaction 属性,并且收据中的条目具有 Original Transaction Identifier 字段。 您的事务队列观察器被调用,状态为 SKPaymentTransactionStateRestored ,用于每个恢复的事务,如“等待 App Store 处理事务”中所述。您此时采取的操作取决于您应用的设计。

.

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/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4