以下で紹介されている方法で非消耗型の課金を実装しようとしています。
https://qiita.com/KikurageChan/items/5c9c0b4a6c6c6ddb26c4
記事に書かれている様に以下の様にしてbuyを呼び出しました。
Swift
1//購入 2IAPManager.shared.buy(productIdentifier: "手順1で記入した製品ID")
しかしそこから何も動かなかったのでIAPManagerクラスの中でブレイクポイントを打って動きを見てみました。
Swift
1 //Product情報をApp Storeから取得 2 func validateProductIdentifiers(productIdentifiers:[String], completion:(([SKProduct]) -> Void)?) { 3 let request = SKProductsRequest(productIdentifiers: Set<String>(productIdentifiers)) 4 self.completionForProductidentifiers = completion 5 request.delegate = self 6 request.start() 7 } 8 //IDで指定したIAPプロダクトの購入を行います 9 func buy(productIdentifier: String) { 10 guard !self.isBuying else { print("購入処理中"); return } 11 validateProductIdentifiers(productIdentifiers: [productIdentifier]) { [unowned self] products in 12 let buyProduct: SKProduct? = { 13 return products.filter { $0.productIdentifier == productIdentifier }.first 14 }() 15 16 //購入処理開始 17 guard let product = buyProduct else { return } 18 19 self.isBuying = true 20 let payment = SKMutablePayment(product: product) 21 self.paymentQueue.add(payment) 22 } 23 }
buyは以上の様になっていますが、これはvalidateProductIdentifiersに(([SKProduct]) -> Void)?のクロージャを渡しているという事ですよね?しかし[unowned self] products in以降にブレイクポイントを打ってもそこは実行されていない様でした。そこで、self.completionForProductidentifiers が実行される以下の部分を見てみました。
Swift
1extension IAPManager: SKProductsRequestDelegate { 2 func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) { 3 if !response.products.isEmpty { 4 self.completionForProductidentifiers?(response.products) 5 } 6 } 7} 8
するとproductsRequestが実行された際にif !response.products.isEmptyの中は実行されていない様でした。つまりresponse.products.isEmptyはtrueになっているという事ですがこれは何故でしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/21 12:49
2019/02/21 13:50