###分からないこと
iPhoneアプリで非消耗型の課金商品を考えています。
アプリ内での課金は実装出来たのですが、シミュレーター上でアプリを削除し、
再インストールしたときにリストアすることが出来ません。
###参考サイト
https://101010.fun/programming/swift4-swiftystorekit.html
の記事を参考にしながら作っています。
###想定と違う動作になってしまう箇所
Swift
1 // リストアボタンを押した時 2 @IBAction func restoreButton(_ sender: Any) { 3 // リストア処理 4 SwiftyStoreKit.restorePurchases(atomically: true) { result in 5 print("Store: リストア処理((result.restoredPurchases.count))") 6 for product in result.restoredPurchases { 7 if product.needsFinishTransaction { 8 SwiftyStoreKit.finishTransaction(product.transaction) 9 } 10 11 if product.productId == "XXXXXX" { 12 // プロダクトID1のリストア後の処理を記述する 13 print("Store: リストア後の処理") 14 UserDefaults.standard.set(true, forKey: "XXXXXX") 15 self.changeToSuperUser() 16 } 17 } 18 } 19 }
###問題の再現手順
まず、アプリ内で非消耗型の商品を購入します。
その後、リストアボタンを押すと、result.restoredPurchases.countは1となっており、
リストア後の処理とかかれたブロックを実行します。ココまでは問題ありません。
しかし、その後、iPhoneシミュレーター上でアプリを一度ホーム画面から削除し、
その後またXcodeからアプリをインストールし、起動後にリストアボタンを押すと
result.restoredPurchases.countは0となり、アンインストール前に購入した商品が
なかったことになります。(つまりリストア出来ない)
ここをリストア出来るようにしないとAppStoreの申請が通らないと思うのですが、
再インストール後にresult.restoredPurchases.countが0になるのは何故なのでしょうか?
###やりたいこと
アプリを再インストールしても、過去に購入済みであれば、
購入済みのユーザー用の処理を行いたい。
###環境・やったこと
iPhoneシミュレーターでiPhone11で実験をしています。
Configuration.storekitを追加してシミュレーター上で非消耗型アイテムを追加し、
スキームのOption設定でConfiguration.storekitを指定しています。
SwiftyStoreKitを使って実装しています。
iPhoneシミュレーター上でApple IDが設定されていないため、
過去の購入履歴がリストアできない可能性も考えて
シミュレーター上の設定で自分の本AppleIDを入力した上で
購入→アプリ削除→アプリ再インストール→リストア
を試しましたが、同じくresult.restoredPurchases.countは0で
過去の支払いが見当たらない状態です。
atomically: true
atomically: false
それぞれの設定での購入・リストアも試してみましたが、結果は同じでした。
どのサイトを見ても、同様のリストア方法のコード記述しか書いておらず、
これ以上何をトライしたらいいのか、何が原因なのか分からずに行き詰まっています。
AppStoreへの申請も、このリストア出来ない状態のため却下され続けています。
どうかお力、お知恵を貸していただけると幸いです m(_ _)m
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。