我在应用程序商店中有很多应用程序,但我的第一次应用内购买遇到了问题。 我正在iPad上测试xcode 5,沙盒中有许多测试用户。 应用内购买适用于Apple托管的其他视频文件。
原始购买和视频下载顺利。恢复购买正常,但如果我删除应用程序并重新安装它,恢复不起作用。 但是,重新安装应用程序后,如果我进行了回购并通过“确认您的应用程序内购买” - > “你想买 _ _?” - > [环境沙箱] - >按“购买”并获取 - > “您已经购买了应用程序内购买,但尚未下载”[环境沙箱] - >然后按“确定”,然后恢复购买并下载视频。 我的猜测是,重新购买mumbo-jumbo在事务队列中设置了一个事务,但在重新安装后没有设置“restoreCompletedTransactions”。
在下面的代码中,当还原不起作用时,仅显示“Restore transaction START”和“Restore transaction END”日志。 重新安装应用后,“restoreCompletedTransactions”似乎没有找到任何交易。
我搜索过几十个帖子(Wenderlich,Troy Brant是一个完整的演练等)但似乎大部分还原都是重置原始购买附带的内容标记,而不是后续下载或不担心用户删除应用程序释放空间并重新安装。
期望用户完成“购买” - > “”你已经购买了“路线是一个糟糕的解决方案,因为有些人可能害怕他们正在重新购买应用程序。 唯一的另一种选择是将所有视频放在初始包中,然后使用钥匙串重置标志,但这会增加下载的大小。
任何建议都会受到欢迎。 如果有人知道将事务添加到事务队列的方法,那将是一种可能的解决方案。
//按下恢复按钮时调用:
- (void) restoreTapped
{
NSLog (@"Restore transaction START");
[ [SKPaymentQueue defaultQueue] restoreCompletedTransactions ];
NSLog (@"Restore transaction END");
}
// SKPaymentTransactionObserver委托方法:
-(void) paymentQueueRestoreCompletedTransactionsFinished : (SKPaymentQueue *) queue
{
NSLog (@"received restored transactions: %i", queue.transactions.count);
for (SKPaymentTransaction * transaction in queue.transactions)
{
[ [SKPaymentQueue defaultQueue] startDownloads : transaction.downloads ];
}
}
-(void) paymentQueue : (SKPaymentQueue *) queue updatedTransactions : (NSArray *) transactions
{
for (SKPaymentTransaction * transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
[omitted]
break;
case SKPaymentTransactionStateRestored:
NSLog (@"Transaction State restored.");
break;
case SKPaymentTransactionStateFailed:
NSLog (@"Failed transaction.");
[self failedTransaction : transaction]; break;
default: break;
}
}
}