如何理解我是否已经为应用程序内购买付款

时间:2014-03-29 11:32:07

标签: ios objective-c in-app-purchase

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

客户希望应用内购买。

以下是In-App的工作方式。

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

一旦我有拉链,我就会在下载完成后解压缩。

对我来说,问题是我如何识别用户xyz之前是否购买了这本书。

e.g。今天用户A支付了图书B.如何获得用户A购买图书的信息?

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

有人说,保存NSUserDefaults中的图书ID,但关注的是如果我删除该应用并再次安装,我应该免费下载图书B.

我只想知道,如何跟踪哪位用户下载了哪本书。

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

1 个答案:

答案 0 :(得分:1)

编辑:

您的应用通过调用SKPaymentQueue的restoreCompletedTransactions方法启动该过程。这会向App Store发送请求以恢复所有应用已完成的交易。如果您的应用为其支付请求的applicationUsername属性设置了值,如“检测不规则活动”中所述,请使用restoreCompletedTransactionsWithApplicationUsername:方法在还原事务时提供相同的信息。 App Store为先前完成的每个事务生成新事务。已还原的事务具有对原始事务的引用:SKPaymentTransaction的实例具有originalTransaction属性,并且收据中的条目具有原始事务标识符字段。 如“等待App Store处理事务”中所述,您的事务队列观察器的状态为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