RevenueCatのPaywallでonRestoreCompletedを使うときに注意すべきこと
アプリ内課金システムとしてRevenueCatを利用しており、最近purchases_ui_flutter
で提供されているPaywallFooterView
を使うことにした。
購入ボタンや復元ボタンを自前で用意する必要がないので、とても便利。
しかし、購入していないのに、「購入を復元」を押すと、アプリ内課金によって得られるサービスが適用されてしまうとの報告をいただいた。
(報告をしていただいた方には本当に感謝しています)
PaywallFooterView
では、onRestoreCompleted
というCallbackで復元が完了したときの処理を書くことができる。
私は、通常の購入が完了したときに呼び出されるonPurchaseCompleted
内と全く同じ処理をonRestoreCompleted
に指定していた。
(アプリ内課金によって得られるサービスを適用し、前の画面に戻る処理)。
報告を受け、onRestoreCompleted
での処理に問題があるだろうということで調べてみると、API Docsに以下の記述があった。
onRestoreCompleted (Optional) Callback that gets called when a restore is completed. Note that this may get called even if no entitlements have been granted in case no relevant purchases were found.
https://pub.dev/documentation/purchases_ui_flutter/latest/views_paywall_footer_view/PaywallFooterView-class.html
関連する購入が見つからない場合にentitlement(権限)が付与されていないときもonRestoreCompleted
が呼び出されるかもしれないらしい。
RevenueCat公式ページでも同様の記載があった。
ということで、購入していない場合に復元が適用されないようにするために、以下のようにした。
onRestoreCompleted: (CustomerInfo customerInfo) {
+ if (customerInfo.entitlements.active.containsKey(entitlementKey)) {
// アプリ内課金によって得られるサービスを適用する処理(onPurchaseCompletedと同じ)
+ }
},
今回の反省点
実装例だけでなくAPI Docsや公式ページをちゃんと見よう!
このPaywallを実装する際、以下の実装例を主に参考にした。
しかし、一応すでに上げた公式ページやAPI Docsも見たので、そこで気づくべきだった。
(特に「Note that ~」から始まっている文章だから)
今後は気をつけたいと思います。
重ね重ね、今回この問題を報告してくださった方に感謝します。