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