InAppPurchaseConnection#queryPastPurchases はどこへ消えた?|InAppPurchase|Android|Flutter


課金済みの「アプリ内アイテム」や「定期購入(サブスクリプション)」を確認するメソッドは何かと調べていると、殆どのサイトで「InAppPurchaseConnection#queryPastPurchases」だと紹介されていた。ChatGPT の回答もそうだった。でも、え、今、in_app_purchase 3.1.5 にこれって無くない?

この件は in_app_purchase: add back queryPastPurchases #82677 の冒頭で問題提起されていた。代わりに「InAppPurchase#restorePurchases」を使うという話で。

The InAppPurchaseConnection.queryPastPurchases method has been removed. Instead, you should use InAppPurchase.restorePurchases

これではダメらしいよ?

※ちなみにこれは Changelog 0.6.0 の内容


復元処理との混同を問題視

InAppPurchase#restorePurchases」はその名の通り「復元」を目的としているから、呼び出すと購入ステータスが「PurchaseStatus#restored」に変更された状態で購入フローへ流れてくる。

課金済みかどうかの情報を取得したいだけなのに、これでは適切ではないという指摘だね。納得。


課金済みの情報を取得するの?

それで結論として用意されたメソッドが「InAppPurchaseAndroidPlatformAddition#queryPastPurchases」だよ~。

---
if (defaultTargetPlatform == TargetPlatform.android) {
  final addition = InAppPurchase.instance.getPlatformAddition<InAppPurchaseAndroidPlatformAddition>();
  QueryPurchaseDetailsResponse response = await addition.queryPastPurchases();
}
---

取得できる内容は「InAppPurchase#restorePurchases」と同じで、重要な点は、これだと購入ステータスが「PurchaseStatus#restored」に変更されていないってこと!


関連する記事


参照した記事


直近に読んでいた漫画(おすすめ)

コメント

このブログの人気の投稿

ImagePicker を操作すると「Lost connection to device.」とだけ言い残して強制終了するの?|iOS|Flutter

Android SDK バージョン(コンパイルに使用する Android API レベル)を変更するの?|compileSdkVersion|SDK|Android|Flutter