You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:45:11