非消費型 IAP を多数含めていますが、アプリをロードするときに問題が発生します。これは、セットアップしたテスト アカウント ユーザーにログインするように常に求められるように見えるためです。
同様の質問を見た後、これは、最初に次の行を各 .case に追加できなかったためだと思います。
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
以下のコードからわかるように、これは各 .case に追加されます。再テストするために、追加のテスト アカウントを作成しましたが、まったく同じ結果が得られます (各 viewDidLoad で、2 つのテスト アカウントにログインするように求められます...)。
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction) が期待どおりに機能していないと思いますか?
どんな助けでも大歓迎です。
override func viewDidLoad() {
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
}
に続く
func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
print("received response ok");
if product_id == "xxxxxxxxx" {
for transaction:AnyObject in transactions {
if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{
switch trans.transactionState {
case .Purchased:
print("Product Purchased");
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
defaults.setBool(true , forKey: "Purchased")
print("Set key ok")
break;
case .Failed:
print("Purchased Failed");
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
break;
case .Restored:
print("Already Purchased");
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
default:
break;
}
}
}
}
else {
//blah blah
}
}
この問題が発生したのは、finishTransaction が期待どおりに機能していないためですか、それとも元のトランザクションが「スタック」したためですか?
編集: ここで SKPaymentQueue.defaultQueue().addPayment(payment); を呼び出します。
func buyProduct(product: SKProduct){
print("Sending the Payment Request to Apple");
let payment = SKPayment(product: product)
SKPaymentQueue.defaultQueue().addPayment(payment);
}
func productsRequest (request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
let count : Int = response.products.count
if (count>0) {
var validProducts = response.products
let validProduct: SKProduct = response.products[0] as SKProduct
if (validProduct.productIdentifier == self.product_id) {
print(validProduct.localizedTitle)
print(validProduct.localizedDescription)
print(validProduct.price)
buyProduct(validProduct);
} else {
print(validProduct.productIdentifier)
}
} else {
print("nothing")
}
}