OGeek|极客世界-中国程序员成长平台

标题: ios - 如何处理未完成的iOS应用内购买消耗品? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 20:01
标题: ios - 如何处理未完成的iOS应用内购买消耗品?

我在服务器端检查和处理 IAP 收据(消耗品),只有在应用程序恢复正常时才调用 [[SKPaymentQueue defaultQueue] finishTransaction:transaction]

当服务器没有返回这个正常(无论出于何种原因)时,应用程序将无法正确完成事务。

我现在的问题是:应用程序需要做什么才能再次接收收据以重试,或者 iOS 是否通过调用 - (void)paymentQueueSKPaymentQueue*)queue updatedTransactionsNSArray* )交易`?当我重新运行我的应用程序时,该项目被重新提交;但用户不需要重新启动应用程序。

相关问题:当​​我尝试再次(在沙盒上)购买仍待处理的项目时,我收到一条 iOS 警报,说我之前购买了它,但没有下载。为什么是这样?对于非消耗品,我期望(并且实际上已经看到)这一点。我可以再买一个消耗品,但之前的那个还在等待中。



Best Answer-推荐答案


一旦你完成了 CONSUMABLE IN-APP 的交易,下面的方法就会触发,添加这个语句“[[SKPaymentQueue defaultQueue]finishTransaction:transaction]”来删除购买的产品。使用这个语句可以避免警告消息(I之前买过但没有下载)。

-(void)paymentQueueSKPaymentQueue *)queue updatedTransactionsNSArray *)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;

    }
}
}

关于ios - 如何处理未完成的iOS应用内购买消耗品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22365835/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4