Ios 如何理解我是否已经为应用内购买付费

Ios 如何理解我是否已经为应用内购买付费,ios,objective-c,in-app-purchase,Ios,Objective C,In App Purchase,我正在制作一个应用程序,其中有书籍和书籍有音频和视频服务 客户端希望应用程序的应用内购买 以下是应用程序内的工作原理 如果用户想买这本书,用户会买这本书,一旦交易完成,自动下载zip文件(从我的服务器上,我正在为这本书添加图像、视频、音频) 一旦我有了zip,我会在下载完成后将其解压缩 对我来说,问题是如何识别用户xyz是否在之前购买了这本书 e、 g.今天用户A购买了B本书。我如何获得用户A购买了B本书的信息 若我有一个用户注册系统,我就可以通过系统的用户ID来识别用户 有人说,在NSUser

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

客户端希望应用程序的应用内购买

以下是应用程序内的工作原理

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

一旦我有了zip,我会在下载完成后将其解压缩

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

e、 g.今天用户A购买了B本书。我如何获得用户A购买了B本书的信息

若我有一个用户注册系统,我就可以通过系统的用户ID来识别用户

有人说,在NSUserDefaults中保存图书id,但担心的是,如果我删除应用程序并再次安装,我应该免费下载图书B

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

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

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

  • 如果您的应用程序使用应用程序收据,并且没有苹果托管 内容,不需要此代码,因为您的应用程序无法还原 已完成的交易。立即完成所有还原的事务
  • 如果您的应用程序使用应用程序回执,并且包含苹果托管的内容,请让 用户在启动前选择要还原的产品 恢复过程。在恢复过程中,请重新下载 用户选择内容并立即完成任何其他事务

NSMutableArray*productidstore=;
SKPaymentTransaction*交易=;
if([ProductIDStore containsObject:transaction.transactionIdentifier]){
//重新下载苹果托管的内容,然后完成交易
//并从产品ID数组中删除产品标识符。
}否则{
[[SKPaymentQueue defaultQueue]finishTransaction:transaction];
}

自应用内购买发布以来,购买还原一直是应用内购买的一项功能。@Paulw11:ohhk。。。这听起来不错。。。为了确认一下,假设我已经支付了B书的费用。。现在我删除应用程序并重新安装。。。现在我试着去买书B。。。苹果会回答说你已经为这本书付费了吗?如果是的话,我想我能做到我想要的……是的,这是正确的。这就像从iPad/iPhone中删除付费应用程序一样。当你再次尝试购买时,苹果会让你下载它free@brian:但ProductIDStore是我将在应用程序中管理的内容。。正确的?如果我删除应用程序,ProductidStore将不会有任何内容…@Paulw11:Ohhk。。。我没有从苹果下载任何东西。。所有下载都是从我的服务器。。。苹果只是为了付款。。。
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];
}