Возникли проблемы при получении всплывающих окон или приглашений для входа в систему - PullRequest
0 голосов
/ 09 января 2019

Я выполнил пошаговое руководство, чтобы включить в приложение непотребляемые покупки. К сожалению, ничего не происходит после того, как пользователь нажимает кнопку покупки. Я не получаю приглашение войти в iTunes или принять платеж. Я что-то упускаю здесь?

Я пробовал несколько пошаговых инструкций, и все они, похоже, имеют похожий код, я выполнил шаги через веб-сайт Apple, однако я не уверен, нужно ли мне делать полную заявку на приложение, прежде чем я смогу проверить приложение покупает через песочницу.

IAPService.swift

import Foundation
import StoreKit
import UIKit

class IAPService: NSObject {

    private override init() {}
    static let shared = IAPService()

    var products = [SKProduct]()
    let paymentQueue = SKPaymentQueue.default()

    func getProducts() {
        let products: Set = [IAPProduct.nonConsumable.rawValue]
       let request = SKProductsRequest(productIdentifiers: products)
        request.delegate = self
        request.start()
        paymentQueue.add(self)
    }

    func purchase(product: IAPProduct) {
        guard let productToPurchase = products.filter({ 
$0.productIdentifier == product.rawValue }).first else { return }
        let payment = SKPayment(product: productToPurchase)
        paymentQueue.add(payment)
    }

    func restorePurchases() {
        print("restore purchases")
        paymentQueue.restoreCompletedTransactions()
    }

}

extension IAPService: SKProductsRequestDelegate {
    func productsRequest(_ request: SKProductsRequest, didReceive 
         response: SKProductsResponse) {
            products = response.products
            for product in response.products {
            print(product.localizedTitle)
        }
    }
}

extension IAPService: SKPaymentTransactionObserver {
    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions 
        transactions: [SKPaymentTransaction]) {
        for transaction in transactions {
        print(transaction.transactionState.status(), 
        transaction.payment.productIdentifier)

            switch transaction.transactionState {
            case .purchasing: break
            default: queue.finishTransaction(transaction)
            }
        }
    }
}

extension SKPaymentTransactionState {
    func status() -> String {
        switch self {
        case .deferred: return "deferred"
        case .failed: return "failed"
        case .purchased: return "purchased"
        case .purchasing: return "purchasing"
        case .restored: return "restored"
        }
    }
}

В моем файле товаров

IAP.Products.swift

import Foundation

enum IAPProduct: String {
     case nonConsumable = "Quizly"
}

В моем основном ВК

override func viewDidLoad() {
        super.viewDidLoad()
        setupViews()
        IAPService.shared.getProducts()
        print("IAP == \(IAPService.shared.products)") // Why is this an empty array?
    }

@objc func pressToGetPremium(_ sender : UIButton) {        
        IAPService.shared.purchase(product: .nonConsumable)
        print("IAP ===== \(IAPService.shared.products)")
}

Когда пользователь нажимает кнопку, я надеялся, что появится всплывающее окно, в результате чего пользователь должен будет войти в свою учетную запись Apple, а затем другое всплывающее окно спросит, хотят ли они принять не расходуемый продукт (1,99 долл. США). ) и т. д. Но я вообще не получаю всплывающее окно.

Я получаю это обратно от продуктов didReceive ......

ответ SKProductsResponse 0x00000002811cba10 baseNSObject @ 0 NSObject
ISA Class 0x2811cba10 0x00000002811cba10 _internal SKПродуктыResponseInternal * 0x28139c0e0 0x000000028139c0e0 NSObject NSObject
_invalidIdentifiers __NSSingleObjectArrayI * 1 элемент 0x00000002811cb930 [0] __NSCFString * "Quizly" 0x000000028139c620 NSMutableString NSMutableString _products __NSArray0 * 0 элементов 0x00000002811c0050 NSArray NSArray NSObject NSObject
Класс ISA __NSArray0 0x000001a25a605811

1 Ответ

0 голосов
/ 10 января 2019

Согласно нашему обсуждению комментария - Ошибка, вызванная методом продуктов didReceive, указывает на то, что ваши bundleIdentifiers не совпадают с теми, что указаны в appStore.

...