【问题标题】:How to handle not finished iOS in-app purchase of consumable?如何处理未完成的iOS应用内购买消耗品?
【发布时间】:2014-03-12 23:13:47
【问题描述】:

我在服务器端检查和处理 IAP 收据(消耗品),只有在应用程序上得到一个好的回复时才调用 [[SKPaymentQueue defaultQueue] finishTransaction:transaction]

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

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

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

【问题讨论】:

    标签: ios objective-c in-app-purchase in-app


    【解决方案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;
    
        }
    }
    }
    

    【讨论】:

      【解决方案2】:

      下次您的应用添加事务观察器时,事务将出现在队列中。

      也许这就是您收到“尚未下载”消息的原因 - 这意味着“应用商店尚未获得完成交易”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-26
        相关资源
        最近更新 更多