Iphone 如果苹果托管的应用内购买内容下载失败怎么办?

Iphone 如果苹果托管的应用内购买内容下载失败怎么办?,iphone,ios,ipad,in-app-purchase,storekit,Iphone,Ios,Ipad,In App Purchase,Storekit,有时下载失败,我的应用程序会在失败后完成交易,这在任何地方都是推荐的。但是如果我完成了事务,那么Store Kit将无法恢复失败的下载。而且,下载失败后,StoreKit似乎不会自动重试下载内容,而且似乎也没有办法触发下载 有人知道在这种情况下该怎么办吗?违背所有建议,在内容完全下载和安装之前不要完成交易 或者我必须以编程方式还原交易并忽略所有其他产品标识符吗?您可以通过以下方式在应用程序中添加还原购买按钮:- //inside of an IBaction [[SKPaymentQueue d

有时下载失败,我的应用程序会在失败后完成交易,这在任何地方都是推荐的。但是如果我完成了事务,那么Store Kit将无法恢复失败的下载。而且,下载失败后,StoreKit似乎不会自动重试下载内容,而且似乎也没有办法触发下载

有人知道在这种情况下该怎么办吗?违背所有建议,在内容完全下载和安装之前不要完成交易


或者我必须以编程方式还原交易并忽略所有其他产品标识符吗?

您可以通过以下方式在应用程序中添加还原购买按钮:-

//inside of an IBaction
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue]restoreCompletedTransactions];


// Then this is called
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {
NSLog(@"%@",queue );
NSLog(@"Restored Transactions are once again in Queue for purchasing %@",[queue transactions]);  

NSMutableArray *purchasedItemIDs = [[NSMutableArray alloc] init];
NSLog(@"received restored transactions: %i", queue.transactions.count);

for (SKPaymentTransaction *transaction in queue.transactions) {
    NSString *productID = transaction.payment.productIdentifier;
    [purchasedItemIDs addObject:productID];
    NSLog (@"product id is %@" , productID);
    // here put an if/then statement to write files based on previously purchased items
    // example if ([productID isEqualToString: @"youruniqueproductidentifier]){write files} else { nslog sorry}
  }  
 }

 [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

希望这能帮助你

你试过恢复购买吗?我希望它能起作用。就像你说的,我现在做这个。直到下载完成,我才完成交易。此外,在应用程序中,我不会将产品标记为已购买,直到下载完成并且下载的文件已复制到documents文件夹中。如果一个产品看起来像是被购买的,这会带来很多麻烦,但是当你试图访问它的内容时,它却不在那里。我的应用程序已经完成了所有这些。但恢复事务是为了让用户对其采取操作。例如,在使用已购买的项目新安装应用程序之后。我想自动重新下载失败的下载,直到下载完成。这家伙完全没有注意到你正在使用托管内容。我和你有同样的问题。