Не работают покупки в приложении

inapp
swift3

#1

Пробую потестить покупку в приложении. Код беру из одноименного курса. Создал тестового пользователя, верифицировал почту. Разлогинился на телефоне в Настройки/AppStore. При нажатии “Оплатить” ничего не происходит.

var listOfProducts = [SKProduct]()
var productToPurchase = SKProduct()
func success() {
    UserDefaults.standard.set(true, forKey: "123")
}

override func viewDidLoad() {
super.viewDidLoad()
if SKPaymentQueue.canMakePayments() {
print (“Покупки доступны”)
let productID: Set = [“com.myPurchaseIdentifier”]
let request = SKProductsRequest(productIdentifiers: productID)
request.delegate = self
request.start()
} else {
print(“Покупки недоступны”)
}
}
func buyProduct() {
print(“buy” + productToPurchase.productIdentifier)
let pay = SKPayment(product: productToPurchase)
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().add(pay)
}
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
print(“productRequest Phase”)
let myProduct = response.products

    for product in myProduct {
        print("товар добавлен")
        print("идентификатор продукта " + product.productIdentifier)
        print(product.localizedTitle)           
        listOfProducts.append(product)
    }
}
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    for transaction in transactions {
        print("Ошибка: + \(transaction.error)")
        
        switch transaction.transactionState {
        case .purchased:
            print("Оплата прошла успешно \(productToPurchase.productIdentifier)")
            let prodID = productToPurchase.productIdentifier
            switch prodID {
            case "com.myPurchaseIdentifier":
                print("Покупка прошла")
                success()
            default:
                break
            }
            queue.finishTransaction(transaction)
            break
        case .failed:
            print("Transaction Failed")
            queue.finishTransaction(transaction)
        default:
            print("сработал дефолт")
            break
        }
    }
}

func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
    for transaction in queue.transactions {
        let prodID = transaction.payment.productIdentifier as String
        switch prodID {
        case "com.myPurchaseIdentifier":
            print("Покупка прошла")
            success()
        default:
            break
        }
    }
}

func paymentQueue(_ queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) {
    print("удаляем транзакцию из очереди")
}

Сама кнопка при нажатии вызывает алерт:

@IBAction func buttonTapped(_ sender: UIButton) {
let alert = UIAlertController(title: “Покупка”, message: “”, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: “Отмена”, style: .cancel, handler: nil))
alert.addAction(UIAlertAction(title: “Оплатить”, style: .default, handler: {
()in
print(“Зашли внутрь кнопки”)
for product in self.listOfProducts {
let productID = product.productIdentifier
if productID == “com.myPurchaseIdentifier” {
self.productToPurchase = product
print(“Получили продукт”)
self.buyProduct()
break
}
}
}))
alert.addAction(UIAlertAction(title: “Восстановить покупку”, style: .default, handler: {
(
)in
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().restoreCompletedTransactions()
}))
self.present(alert, animated: true, completion: nil)
}

Алерт появляется, при нажатии кнопки “Оплатить” полный лог выглядит так:

Покупки доступны
productRequest Phase
Зашли внутрь кнопки

И все. При нажатии “Восстановить покупку” уже просит ввести AppleID или создать новый. Тут видимо все как надо работает.


#2

Оно и не будет работать пока не получить сертификат на платные приложения, сам на том е месте бился день)


#3

не совсем понял, о каком сертификате идет речь? У меня вроде все сертификаты автоматически прописываются. Xcode никаких ошибок не пишет. В developer.apple.com в разделе IDs нужные ID есть (сами прописались). itunes connect их видит.


#4

Здравствуйте.
Вам удалось реализовать подписки в приложении, как рассказывалось в курсе, на swift3?