Post

Replies

Boosts

Views

Activity

Invalid product identifier for IAP on tvOS
I am unable to get In-App Purchases working on a tvOS app target. The IAP SKProductsRequest is successful when running the same code in my iOS target/simulator, but does not work in either a tvOS simulator or physical device. class StoreManager: NSObject, ObservableObject, SKProductsRequestDelegate, SKPaymentTransactionObserver {          //FETCH PRODUCTS     var request: SKProductsRequest!          @Published var premium = SKProduct()          func getProducts() {         print("Start requesting products ...")         let productID = "com.willswire.appname.premium"         let request = SKProductsRequest(productIdentifiers: Set([productID]))         request.delegate = self         request.start()     }          func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {         print("Did receive response")                  if let product = response.products.first {             DispatchQueue.main.async {                 self.premium = product             }         }                  for invalidIdentifier in response.invalidProductIdentifiers {             print("Invalid identifiers found: \(invalidIdentifier)")         }     }          func request(_ request: SKRequest, didFailWithError error: Error) {         print("Request did fail: \(error)")     }          //HANDLE TRANSACTIONS     @Published var transactionState: SKPaymentTransactionState?          func purchaseProduct() {         if SKPaymentQueue.canMakePayments() {             let payment = SKPayment(product: self.premium)             SKPaymentQueue.default().add(payment)         } else {             print("User can't make payment.")         }     }          func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {         for transaction in transactions {             switch transaction.transactionState {             case .purchasing:                 transactionState = .purchasing             case .purchased:                 UserDefaults.standard.setValue(true, forKey: "premium")                 queue.finishTransaction(transaction)                 transactionState = .purchased             case .restored:                 UserDefaults.standard.setValue(true, forKey: "premium")                 queue.finishTransaction(transaction)                 transactionState = .restored             case .failed, .deferred:                 print("Payment Queue Error: \(String(describing: transaction.error))")                 queue.finishTransaction(transaction)                 transactionState = .failed             default:                 queue.finishTransaction(transaction)             }         }     } }
1
0
1.7k
Feb ’22
Invalid product identifier for IAP on tvOS
I am unable to get In-App Purchases working on a tvOS app target. The IAP SKProductsRequest is successful when running the same code in my iOS target/simulator, but does not work in either a tvOS simulator or physical device. class StoreManager: NSObject, ObservableObject, SKProductsRequestDelegate, SKPaymentTransactionObserver {          //FETCH PRODUCTS     var request: SKProductsRequest!          @Published var premium = SKProduct()          func getProducts() {         print("Start requesting products ...")         let productID = "com.willswire.appname.premium"         let request = SKProductsRequest(productIdentifiers: Set([productID]))         request.delegate = self         request.start()     }          func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {         print("Did receive response")                  if let product = response.products.first {             DispatchQueue.main.async {                 self.premium = product             }         }                  for invalidIdentifier in response.invalidProductIdentifiers {             print("Invalid identifiers found: \(invalidIdentifier)")         }     }          func request(_ request: SKRequest, didFailWithError error: Error) {         print("Request did fail: \(error)")     }          //HANDLE TRANSACTIONS     @Published var transactionState: SKPaymentTransactionState?          func purchaseProduct() {         if SKPaymentQueue.canMakePayments() {             let payment = SKPayment(product: self.premium)             SKPaymentQueue.default().add(payment)         } else {             print("User can't make payment.")         }     }          func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {         for transaction in transactions {             switch transaction.transactionState {             case .purchasing:                 transactionState = .purchasing             case .purchased:                 UserDefaults.standard.setValue(true, forKey: "premium")                 queue.finishTransaction(transaction)                 transactionState = .purchased             case .restored:                 UserDefaults.standard.setValue(true, forKey: "premium")                 queue.finishTransaction(transaction)                 transactionState = .restored             case .failed, .deferred:                 print("Payment Queue Error: \(String(describing: transaction.error))")                 queue.finishTransaction(transaction)                 transactionState = .failed             default:                 queue.finishTransaction(transaction)             }         }     } }
Replies
1
Boosts
0
Views
1.7k
Activity
Feb ’22