Closed7

RevenueCatのPaywallでonRestoreCompletedを使うときに注意すべきこと

enoiuenoiu

アプリ内課金システムとしてRevenueCatを利用しており、最近purchases_ui_flutterで提供されているPaywallFooterViewを使うことにした。

https://pub.dev/packages/purchases_ui_flutter

購入ボタンや復元ボタンを自前で用意する必要がないので、とても便利。

enoiuenoiu

しかし、購入していないのに、「購入を復元」を押すと、アプリ内課金によって得られるサービスが適用されてしまうとの報告をいただいた。
(報告をしていただいた方には本当に感謝しています)

enoiuenoiu

PaywallFooterViewでは、onRestoreCompletedというCallbackで復元が完了したときの処理を書くことができる。
私は、通常の購入が完了したときに呼び出されるonPurchaseCompleted内と全く同じ処理をonRestoreCompletedに指定していた。
(アプリ内課金によって得られるサービスを適用し、前の画面に戻る処理)。

enoiuenoiu

報告を受け、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が呼び出されるかもしれないらしい。

enoiuenoiu

ということで、購入していない場合に復元が適用されないようにするために、以下のようにした。

onRestoreCompleted: (CustomerInfo customerInfo) {
+ if (customerInfo.entitlements.active.containsKey(entitlementKey)) {
    // アプリ内課金によって得られるサービスを適用する処理(onPurchaseCompletedと同じ)
+ }
},
enoiuenoiu

今回の反省点

実装例だけでなくAPI Docsや公式ページをちゃんと見よう!


このPaywallを実装する際、以下の実装例を主に参考にした。
https://github.com/RevenueCat/purchases-flutter/blob/main/revenuecat_examples/purchase_tester/lib/src/paywall_footer_screen.dart
この実装例では、今回問題となったことについて触れられていなかった。
しかし、一応すでに上げた公式ページやAPI Docsも見たので、そこで気づくべきだった。
(特に「Note that ~」から始まっている文章だから)

今後は気をつけたいと思います。

重ね重ね、今回この問題を報告してくださった方に感謝します。

このスクラップは6ヶ月前にクローズされました