首页 > 解决方案 > 应用内购买付款交易无法正常运行

问题描述

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

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

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 设置有关。

谢谢 - 我已经被困在这个问题上太久了,所以非常感谢任何帮助。

标签: swiftxcodeapp-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 构建和运行您的应用程序。沙盒帐户单独存储,您可以直接在设备上的“设置”中控制您的沙盒帐户。(您必须在连接的设备上运行。)


推荐阅读