現在 SwiftyStoreKit を使ってサブスクリプション型の App 内課金を実装しています。その過程でいくつか分からないことがあるのですが、
① こちら のサイトなどで AppDelegate 内で起動時にトランザクションの監視を行っていますが、purchase.transaction.transactionState の値によって購入済みかどうか分かるという認識で正しいでしょうか?また、その場合サブスクの期間が切れていたら purchased や restored といった値は返ってこないという事でしょうか?
また SwiftyStoreKit.verifySubscription でサブスクリプションの状況が確認できる様ですが、SwiftyStoreKit.completeTransactions でサブスクの状況が確認できるのであればこちらの verifySubscription は必要ない気もするのでやはり completeTransactions の purchased や restored では現在のサブスクの状況は分からないという事なのでしょうか?
② 課金済みか、サブスク期間が切れていないかのチェックはアプリ起動時に AppDelegate で verifySubscription を行い UserDefault などのフラグを更新してアプリ内ではそのフラグを元に機能の出しわけをする様な作りにしようと思っているのですが通常サブスクモデルの課金機能はこの様な流れで問題ないのでしょうか?
③ SwiftyStoreKit.restorePurchases でリストアができる様ですが、こちらでリストアした場合、例えば一ヶ月プランで半月後にリストアした、という様な時には正しくさらに半月後にverifySubscription で expired とされるのでしょうか?
3つ質問を出してしまいましたが、どれか1つでも結構ですのでご存知の方いらっしゃいましたらご教授ください。
------- 追記 -----------
下記 verifySubscription を行うメソッドを追記しました。
Swift
1func verifyPurchase (with PRODUCT_ID:String) { 2 3 let appleValidator = AppleReceiptValidator(service: .production, sharedSecret: "sharedSecret" ) 4 SwiftyStoreKit.verifyReceipt(using: appleValidator) {(result) in 5 6 switch result { 7 8 case .success(let receipt): 9 10 //自動更新 11 let purchaseResult = SwiftyStoreKit.verifySubscription(ofType: .autoRenewable, productId: PRODUCT_ID, inReceipt: receipt) 12 13 switch purchaseResult { 14 15 case .purchased: 16 UserDefaults.standard.set(1, forKey: PRODUCT_ID) 17 18 case .notPurchased: 19 break 20 21 case .expired( _, _): 22 UserDefaults.standard.set(nil, forKey: PRODUCT_ID) 23 } 24 25 case .error(let error): 26 print (error) 27 28 } 29 30 31 } 32} 33
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/19 14:56
2021/01/19 15:23
2021/01/19 15:41 編集
2021/01/20 13:30
2021/01/20 13:39
2021/01/20 14:09
2021/01/20 14:47
2021/01/20 15:17 編集
2021/01/20 15:33