应用内购买支付交易无法正常运行

In-App Purchase Payment Transaction Not Functioning

我的应用程序会在用户单击特定按钮时显示提示。我想为非消耗性应用程序内购买提供额外的提示包(单击要购买的包,然后如果已购买,您可以使用相同的按钮打开和关闭包)。

下面是所有相关代码...

import UIKit
import QuartzCore
import StoreKit

class ViewController: UIViewController, SKPaymentTransactionObserver {



    let productID = "com.domain.app.purchase"


    override func viewDidLoad() {
        super.viewDidLoad()

        SKPaymentQueue.default().add(self)
    }


    var packsUnlocked = false



    @IBAction func selectPack1(_ sender: UIButton) {


        if SKPaymentQueue.canMakePayments() {
            let paymentRequest = SKMutablePayment()
            paymentRequest.productIdentifier = productID
            SKPaymentQueue.default().add(paymentRequest)
            print("Initiating Transaction")
        } else {
            print("No Purchased")
        }


        if packsUnlocked == false {
            print("It's locked, ‘Pack 1’ not enabled")
        } else {
            print(“Utilize Purchase”)
            //this is where you place code to use the purchased ‘Pack 1’
        }


    }



    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transaction in transactions{
            if transaction.transactionState == .purchased {
                packsUnlocked = true
                print("Transaction Successful")
                } else if transaction.transactionState == .failed {
                    print("Transaction Failed")
                    }
            }

        }

}

然而,每当我 运行 代码并单击按钮时,我得到的只是调试器中的以下输出:

"
Initiating Transaction
It's locked, 'Pack 1' not enabled
Transaction Failed
"

这是我的第一个应用程序,我以前从未设置过沙盒测试器,所以我不确定是代码有问题还是我的 App Store Connect 设置有问题。

谢谢 - 我一直坚持这个问题太久了,非常感谢任何帮助。

您需要在沙盒环境中的实际设备上测试应用内购买。

这是关于它的 Apple 文档,但我也可以指导您。

https://developer.apple.com/documentation/storekit/in-app_purchase/testing_in-app_purchase_transactions

主要步骤是:

  1. 在 App Store Connect 中创建沙盒或测试用户帐户。

  2. 对于 iOS 12 或更高版本 — 不要退出 App Store;只需从 Xcode 构建并 运行 您的应用。沙盒帐户是单独存储的,您可以直接在设备上的“设置”中控制您的沙盒帐户。 (您必须在连接的设备上 运行。)