我检查&处理服务器端的IAP收据(耗材),只有在应用程序恢复正常时才会调用[[SKPaymentQueue defaultQueue] finishTransaction:transaction]
。
当服务器没有返回时(无论出于何种原因),应用程序正确无法完成交易。
现在我的问题是:应用程序需要做什么才能再次接收收据以进行重试,或者iOS是否通过调用来处理此问题 - (void)paymentQueue:(SKPaymentQueue *)queue updatednsnsactions:(NSArray * )transactions`?当我重新启动我的应用程序时,该项目被重新提交;但是用户不需要重新启动应用程序。
相关问题:当我再次尝试购买尚未处理的项目时(在沙盒上),我收到了一条iOS警报,说我之前购买但未下载。为什么是这样?我希望(并且实际上已经看到)非消耗品。我可以买另一种消费品,前一种消费品还在等待。
答案 0 :(得分:1)
完成CONSUMABLE IN-APP的交易后,下面的方法将触发添加此声明“[[SKPaymentQueue defaultQueue] finishTransaction:transaction]”以删除购买的产品。使用此声明可以避免警报消息(I早点买了,但没下载)。
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState) {
case SKPaymentTransactionStatePurchased:
if (transaction.downloads)
{
[[SKPaymentQueue defaultQueue]
startDownloads:transaction.downloads];
} else {
//Add the following line to remove purchased observer
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}
break;
case SKPaymentTransactionStateFailed:
[[SKPaymentQueue defaultQueue]
finishTransaction:transaction];
break;
}
}
}
答案 1 :(得分:0)
下次您的应用添加事务观察器时,事务将显示在队列中。
也许这就是为什么你得到'尚未下载'的消息 - 这意味着'应用程序商店尚未获得finishTransaction'。