1

非消費型 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")
    }
}
4

1 に答える 1

0

これは「自分自身を修正」しました。私は今、私が追加したと思います:

SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction) 

再ログインするたびに、以前に「スタックした」トランザクションが終了し、バックログから削除されましたか?

どちらにしても; 今は解決しました。

于 2016-03-12T15:39:56.767 に答える