Flutter中如何直接查询Play Store用户的应用内购买记录
完全可以实现,不需要全局常驻购买事件监听,用官方的in_app_purchase包就能拿到和原生queryPurchasesAsync完全对等的查询能力,非常适配你做付费去广告的轻量场景。
具体实现方式
你要实现的终身去广告属于非消耗型内购商品,直接在需要校验用户付费状态的时机(比如应用冷启动、广告位加载前)主动调用查询接口即可,全程没有多余的常驻监听开销:
- 核心调用方法:
// 主动拉取当前用户所有处于有效状态的购买记录 final List<PurchaseDetails> validPurchases = await InAppPurchase.instance.queryPurchases(); - 校验逻辑非常简单:遍历返回的购买列表,检查是否存在你配置的去广告商品ID,同时满足购买状态为
PurchaseStatus.purchased、已经完成购买确认即可,命中就直接开启无广告模式。
注意事项
- 这个接口在安卓端底层就是对原生
queryPurchasesAsync的封装,只会返回用户当前未消耗、未退款、有效的购买项,不会拉取全量历史购买记录,性能开销极低。iOS端会自动对接原生的有效交易校验逻辑,两端行为一致,不需要你额外写原生桥接代码。 - 不需要提前订阅购买流也能正常调用这个查询接口。只有当你需要处理用户在应用内点击购买按钮的实时支付结果时,才需要临时监听购买流,支付流程结束后就可以取消订阅,完全不需要全局挂载监听。
- 不要误用
queryPastPurchases接口做付费状态校验:这个接口会拉取用户全量历史购买记录(包括已消耗的商品、已失效的订阅等),和你要查询当前有效购买的需求不匹配,底层实现也不是对应安卓的queryPurchasesAsync。
内容的提问来源于stack exchange,提问作者under
相关产品推荐
相关产品推荐

