【问题标题】:Testing In-App Purchases (IAP) - Need Help Clearing Transaction Queue测试应用内购买 (IAP) - 需要帮助清除交易队列
【发布时间】:2020-05-16 14:39:19
【问题描述】:

我已经制作了一个带有 IAP 的应用程序,我第一次尝试对其进行测试,我收到了登录提示,但从那以后,我没有收到任何登录提示(我认为这是因为有一个失败的事务卡在队列中)。

在清除交易队列方面我迫切需要帮助,因为所有这些 IAP 语言对我来说都非常陌生。我已经在几个地方阅读了以下 sn-p 的工作原理,但老实说,我不确定如何正确使用它:

for transaction in SKPaymentQueue.default().transactions {
                guard
                    transaction.transactionState != .purchasing,
                    transaction.transactionState != .deferred
                else {
                    //Optionally provide user feedback for pending or processing transactions
                    return
                }
                //Transaction can now be safely finished
                SKPaymentQueue.default().finishTransaction(transaction)
            }

sn-p 终于又出现了登录提示,但后来我陷入了一个永无止境的登录循环。

下面是我选择放置它的位置,但它目前只是让我在登录后立即再次登录...... (新代码 sn-p 位于两行注释“NEW”之间)

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { //--------- In App Purchase
        for transaction in transactions{
            //------------------------------------------------------------ New
            for transaction in SKPaymentQueue.default().transactions {
                guard
                    transaction.transactionState != .purchasing,
                    transaction.transactionState != .deferred
                else {
                    //Optionally provide user feedback for pending or processing transactions
                    return
                }
                //Transaction can now be safely finished
                SKPaymentQueue.default().finishTransaction(transaction)
            }
            //------------------------------------------------------------ New
            if transaction.transactionState == .purchased {
                print("Transaction Successful")
                packsUnlocked = true
            } else if transaction.transactionState == .failed {
                print("Transaction Failed with error: \(transaction.error)")
            }
        }

    }

非常感谢您对此提供的任何帮助,因为 Apple 支持只能为我提供非技术支持,而且我已经在这个应用程序中投入了大量资源,只是到最后一步才能完成。

谢谢

【问题讨论】:

  • 我想我基本上只需要继续登录队列中的每个事务,因为它终于起作用了......但我很好奇是否有人对是否可以改进此代码有任何反馈。还有谁知道我是否应该为最终产品的后期测试删除这个或任何东西?

标签: ios swift xcode in-app-purchase app-store-connect


【解决方案1】:

如果在购买交易后不考虑收据验证,那么这里是预期的回调

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { //--------- In App Purchase
        for transaction in transactions {
            guard
                transaction.transactionState != .purchasing,
                transaction.transactionState != .deferred
            else {
                //Optionally provide user feedback for pending or processing transactions
                continue
            }

            if transaction.transactionState == .purchased || transaction.transactionState == .restored {
                print("Transaction Successful")
                packsUnlocked = true
            } else if transaction.transactionState == .failed {
                print("Transaction Failed with error: \(transaction.error)")
            }

            //Transaction can now be safely finished
            queue.finishTransaction(transaction)
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-01
    • 2011-12-06
    • 1970-01-01
    • 2011-09-30
    • 2014-07-11
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    相关资源
    最近更新 更多