При покупке приложения кнопка восстановления не вызывает никаких действий? - PullRequest
0 голосов
/ 02 марта 2020

Я новичок в работе с покупками в приложении. Я настроил свое приложение, чтобы разрешить использование нескольких непотребляемых приложений. Если это первая покупка, она работает отлично. Если я попытаюсь снова нажать кнопку «Купить», появится сообщение «Это встроенное приложение уже куплено et c. Et c». как только вы нажмете Okay, ничего не произойдет. Я заметил, что в качестве опции отображается только «Хорошо», а не «Отмена» и «Хорошо». В моем тестовом приложении оно показывает и то, и другое отлично. Photo example of restore alert `@IBOutlet слабый переменный buyProductID: UILabel! let product1 = "TestAd.com" @IBOutlet слабый var adView1: UIView!

func buyProduct1(product1: SKProduct){
     print("Sending the Payment Request to Apple 1");
     let payment1 = SKPayment(product: product1)
     SKPaymentQueue.default().add(payment1);
 }

@IBAction func product1Btn(sender: AnyObject) {

   buyProductID.text = "Product1"
   print("About to fetch the product... 1")

            // Can make payments
            if (SKPaymentQueue.canMakePayments())
            {
                let productID1:NSSet = NSSet(object: self.product1);
                let productsRequest1:SKProductsRequest = SKProductsRequest(productIdentifiers: productID1 as! Set<String>);
                productsRequest1.delegate = self;
                productsRequest1.start();
                print("Fetching Products 1");
            }else{
                print("Can't make purchases 1");
            }
}


func purchase1ViewDid(){

    if (UserDefaults.standard.bool(forKey: "purchased1")){
        adView1.isHidden = true
        print("No ads for 1")
    } else {
        print("Yes ads 1")
    }
}





func productsRequest (_ request: SKProductsRequest, didReceive response: SKProductsResponse) {

//PRODUCT 1
let count1 : Int = response.products.count
if (count1>0) {
    let validProduct1: SKProduct = response.products[0] as SKProduct
    if (validProduct1.productIdentifier == self.product1) {
        print(validProduct1.localizedTitle)
        print(validProduct1.localizedDescription)
        print(validProduct1.price)
        buyProduct1(product1: validProduct1);
    } else {
        print(validProduct1.productIdentifier)
    }
} else {
    print("nothing 1")
}

}

   func request(_ request: SKRequest, didFailWithError error: Error) {
        print("Error Fetching product information 1");
    }


    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions1: [SKPaymentTransaction]) {
        print("Received Payment Transaction Response from Apple 1");



        for transaction1:AnyObject in transactions1 {
            if let trans:SKPaymentTransaction = transaction1 as? SKPaymentTransaction{
                switch trans.transactionState {
                case .purchased:


                    if buyProductID.text == "Product1" {

                        print("Product Purchased 1");
                        SKPaymentQueue.default().finishTransaction(transaction1 as! SKPaymentTransaction)
                        // Handle the purchase
                        UserDefaults.standard.set(true , forKey: "purchased1")
                        adView1.isHidden = true

                    }

                    break;
                case .failed:
                    print("Purchased Failed 1");
                    SKPaymentQueue.default().finishTransaction(transaction1 as! SKPaymentTransaction)
                    break;



                case .restored:
                    print("Already Purchased 1");
                    SKPaymentQueue.default().restoreCompletedTransactions()


                    // Handle the purchase
                    UserDefaults.standard.set(true , forKey: "purchased1")
                    adView1.isHidden = true
                    break;
                default:
                    break;
                }
            }
        }
    }

`

1 Ответ

2 голосов
/ 02 марта 2020

Расходные материалы можно купить только один раз, так что это ожидаемое поведение. Это сообщение отображается потому, что вы можете приобрести не расходуемый товар только один раз, и оно остается связанным с учетной записью. Он думает, что, поскольку вы уже приобрели предмет, вы просто хотите восстановить его. Как примечание, для целей тестирования IAP должны быть протестированы с использованием реального устройства, поэтому симулятор не будет тестировать IAP правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...