连续登录对话框进行沙箱测试
问题描述:
我正在尝试测试我的应用内购买,并且当我去购买它时,我会一遍又一遍地收到登录框。她是我的助手连续登录对话框进行沙箱测试
import Foundation
import StoreKit
class IAPHelper: NSObject {
private final let productIdentifiers: Set<String> = ["non-consumable"]
static let sharedIntance = IAPHelper()
private var request: SKProductsRequest!
private var products: [SKProduct] = []
func performProductRequestForIdentifiers() {
request = SKProductsRequest(productIdentifiers: productIdentifiers)
request.delegate = self
request.start()
}
func setupPurchases(_ handler: @escaping (Bool) -> Void) {
if SKPaymentQueue.canMakePayments() {
handler(true)
SKPaymentQueue.default().add(self)
return
}
handler(false)
}
func createPaymentRequestForProduct() {
guard let product = products.first else { return }
print(product.localizedTitle)
let payment = SKMutablePayment(product: product)
payment.quantity = 1
SKPaymentQueue.default().add(payment)
}
}
extension IAPHelper: SKProductsRequestDelegate {
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
products = response.products
}
}
extension IAPHelper: SKPaymentTransactionObserver {
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case .purchasing:
print("purchasing")
break
case .purchased:
print("purchased")
queue.finishTransaction(transaction)
break
case .failed:
print("failed")
queue.finishTransaction(transaction)
break
case .restored:
print("restored")
queue.finishTransaction(transaction)
break
case .deferred:
print("deferred")
break
}
}
}
}
在App-代表,我检查进行购买,并开始观测
IAPHelper.sharedIntance.setupPurchases { (success) in
if success {
IAPHelper.sharedIntance.performProductRequestForIdentifiers()
}
}
的能力,并在我的主要ViewControoller
在UIButton
我打电话IAPHelper.sharedIntance.createPaymentRequestForProduct()
我有我的沙盒用户在连接和应用程序内购买做连接也。我在iPhone上退出了我的真实帐户,并登录了沙箱。任何帮助都会很棒。
答
我认为你的代码有问题,特别是在你添加SKPaymentTransactionObserver的部分。
你下面的功能是有点怪异:
func setupPurchases(_ handler: @escaping (Bool) -> Void) {
if SKPaymentQueue.canMakePayments() {
handler(true)
SKPaymentQueue.default().add(self)
return
}
handler(false)
}
什么,我建议你做的是以下几点:
func setupPurchases() {
SKPaymentQueue.default().add(self)
}
,然后将下面的代码添加到AppDelegate类,里面的didFinishLaunchingWithOptions
方法:
IAPHelper.sharedIntance.setupPurchases()
希望这能解决问题。