Кнопка сброса приложения «Восстановить покупки» при втором нажатии - PullRequest
0 голосов
/ 07 февраля 2019

Кажется, что мои восстановительные покупки работают правильно, за исключением того, что приложение вылетает при повторном нажатии.Есть ли обходной путь для этого?Вот мой код:

import UIKit
import StoreKit

class SettingsVC: UIViewController, SKPaymentTransactionObserver {

@IBOutlet weak var restorePurchaseButton: UIButton!
@IBOutlet weak var privacyPolicyButton: UIButton!
@IBOutlet weak var termsofUseButton: UIButton!
@IBOutlet weak var unlockButton: UIButton!

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    SKPaymentQueue.default().add(self)
    checkUnlockButton()


}

@IBAction func RestoreBtnClicked(_ sender: Any) {

    SKPaymentQueue.default().restoreCompletedTransactions()
    restorePurchaseButton.isEnabled = false
}


func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    for transaction in transactions{
       if transaction.transactionState == .restored{
            UserDefaults.standard.set(true, forKey: "payment")
            SKPaymentQueue.default().finishTransaction(transaction)

       }
    }
}

Редактировать: Вот второй контроллер вида.Он содержит кнопку, которая позволяет пользователю приобрести продукт.Кнопка восстановления покупки находится в отдельном контроллере представления.Я относительно новичок в Swift, поэтому, пожалуйста, постарайтесь придумать свой ответ для меня, ха-ха.

import Foundation
import UIKit
import StoreKit

class UnlockContentVC: UIViewController, SKPaymentTransactionObserver {

@IBOutlet weak var removeAds: UIButton!
@IBOutlet weak var noThanks: UIButton!

override func viewDidLoad() {
    //removeAds.layer.cornerRadius = 10

    SKPaymentQueue.default().add(self)

    removeAds.layer.cornerRadius = removeAds.frame.height / 2

}



@IBAction func dismissModal(_ sender: Any) {

    navigationController?.popViewController(animated: true)

    dismiss(animated: true, completion: nil)

}

@IBAction func OnClickUlockBtn(_ sender: Any) {
    if SKPaymentQueue.canMakePayments(){
        //can make payments
        let paymentRequest = SKMutablePayment()
        paymentRequest.productIdentifier = productID
        SKPaymentQueue.default().add(paymentRequest)

    }else{
        //can't make payments
        print("Device can not make payments...")
    }

}


func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    for transaction in transactions{
        if transaction.transactionState == SKPaymentTransactionState.purchased{
            //User Payment Successfull
            UserDefaults.standard.set(true, forKey: "payment")
            print("payment was successfull")
            SKPaymentQueue.default().finishTransaction(transaction)
        }else if transaction.transactionState == .failed{
            //User Payment failed
            print("transaction failed...")
            SKPaymentQueue.default().finishTransaction(transaction)
            if let error = transaction.error {
                print("\(error.localizedDescription)")
            }
        } 
    }
}

}

1 Ответ

0 голосов
/ 07 февраля 2019

Исправлено.

override func viewDidDisappear(_ animated: Bool) {
   SKPaymentQueue.default().remove(self)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...