应用内购买支付交易无法正常运行
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 文档,但我也可以指导您。
主要步骤是:
在 App Store Connect 中创建沙盒或测试用户帐户。
对于 iOS 12 或更高版本 — 不要退出 App Store;只需从 Xcode 构建并 运行 您的应用。沙盒帐户是单独存储的,您可以直接在设备上的“设置”中控制您的沙盒帐户。 (您必须在连接的设备上 运行。)
我的应用程序会在用户单击特定按钮时显示提示。我想为非消耗性应用程序内购买提供额外的提示包(单击要购买的包,然后如果已购买,您可以使用相同的按钮打开和关闭包)。
下面是所有相关代码...
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 文档,但我也可以指导您。
主要步骤是:
在 App Store Connect 中创建沙盒或测试用户帐户。
对于 iOS 12 或更高版本 — 不要退出 App Store;只需从 Xcode 构建并 运行 您的应用。沙盒帐户是单独存储的,您可以直接在设备上的“设置”中控制您的沙盒帐户。 (您必须在连接的设备上 运行。)