Flutter in_app_purchase调用queryProductDetails()无响应卡住问题求助
Flutter in_app_purchase 调用
queryProductDetails 无响应排查方案 基础环境校验
- 测试设备/模拟器必须安装正版Google Play服务(版本≥16.0.0),且网络环境可以正常访问Google Play服务,网络不通会直接导致请求挂起无返回。
- 应用当前运行的包名、签名与Google Play Console后台提交的版本完全一致,debug签名和release签名不一致会触发Play的拦截规则,导致查询无响应。
- Google Play Console后台配置的对应内购商品状态为已激活,当前登录设备的Google账号已经加入应用的内购测试白名单。
- 传入
queryProductDetails方法的商品ID集合,和后台配置的商品ID完全匹配,无拼写错误、多余空格或跨平台混用(iOS/安卓商品ID不通用)。
代码逻辑校验
- 执行查询前必须先调用
InAppPurchase.instance.isAvailable()判断服务是否可用,只有返回true时才能执行后续操作,参考逻辑:
final bool iapAvailable = await InAppPurchase.instance.isAvailable(); if (!iapAvailable) { // 自行处理服务不可用逻辑,禁止继续执行查询请求 return; } final ProductDetailsResponse response = await InAppPurchase.instance.queryProductDetails(productIds);
- 安卓端打包需要添加混淆规则,避免Play Billing相关类被误删,在
android/app/proguard-rules.pro中添加:
-keep class com.android.billingclient.** { *; } -keep class io.flutter.plugins.inapppurchase.** { *; }
- 确认初始化流程完全符合要求,初始化完成后再执行查询操作,不要在应用启动的第一帧就触发查询。
特殊场景排查
- 完全移除之前集成的RevenueCat所有依赖、初始化代码和配置项,双IAP SDK同时运行会抢占BillingClient实例,导致请求被挂起无返回。
- 将
in_app_purchase包升级到最新正式版,旧版本存在安卓端查询无响应的已知兼容性bug。 - 排查其他第三方SDK是否占用了Billing服务连接,可直接在安卓原生层调用Play Billing SDK的查询接口验证,排除Flutter插件层的问题。
内容的提问来源于stack exchange,提问作者Dinesh Parmar
相关产品推荐
相关产品推荐

