处理在下次启动
问题描述:
未决的应用程序内购买交易如何调用处理在下次启动
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
如果之前接收的
更新的交易响应SKPaymentTransactionStatePurchased
和后实际入账的钱给了用户的iTunes帐户,该应用因来电或其他原因而被杀害。
不这样做不会让你在重新启动时解锁功能,并尝试重新购买会给这个错误“你已经购买了这个,但它没有被下载”,因为你没有完成交易,并失败解锁功能,因为该应用程序被杀害。但在这一点上,这笔钱是从用户的iTunes账户中扣除的。这一切都发生在实际借记资金之后,并且在您收到SKPaymentTransactionStatePurchased回复之前。在应用程序被杀之间。现在在这种情况下应该怎么做?
答
事务队列一直保持活动状态直到您完成它,即使应用程序已被杀死,只要确保您在下次启动时保持观察队列。
请注意,即使多个事务已排队,您也可以区分它们,因为paymentQueue:updatedTransactions:为每个事务提供一个数组,并且您可以单独查询它们的状态。例如:
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchasing:
// Purchasing... waiting...
break;
case SKPaymentTransactionStatePurchased:
// Complete transaction here
break;
case SKPaymentTransactionStateFailed:
// Handle failure and finish transaction here
break;
case SKPaymentTransactionStateRestored:
// Restore transaction
break;
}
}
}
我不这么认为。如果您没有完成交易,您将会重新启动什么通知? – amateurcoder 2011-04-29 16:17:38
是的,它仍然活跃,我发现了。但是,假设你在队列中有2,3个待处理的请求没有完成,现在当添加观察者后在重新启动时回复时,你如何知道ex的事务细节?这些未完成交易的产品标识符。我的意思是询问如何解释现在出现的响应,它是否有一些信息,或者我们是否需要在userdefaults中存储unfinishedrequests.productIdentifiers之类的东西,并在接收到此响应时处理它们? – amateurcoder 2011-04-30 06:12:13
paymentQueue:updatedTransactions:为您提供一个包含所有未决事务的数组。看到我上面编辑的答案。 – 2011-04-30 06:19:48