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

Flutter in_app_purchase插件Android端无法连接Google Play商店问题排查求助

Android端InAppPurchase.isAvailable()一直加载的排查方案

我之前也碰到过类似的Android端连接Google Play卡壳的问题,结合你的代码和描述,咱们一步步来排查可能的原因:

1. 先确认基础环境是否达标

  • Google Play服务状态:你的Android真机必须安装并更新到最新版Google Play服务,同时要登录一个有效的Google账号,且账号所在地区支持应用内购买功能。如果Play服务版本过低或未登录账号,isAvailable()很可能会无响应。
  • 网络环境:确保设备能正常访问Google Play商店(部分地区可能需要特殊网络配置),应用内购买依赖Google Play的后台服务,网络不通会直接导致连接卡住。

2. 验证Google Play Console配置

  • 商品状态与ID匹配:检查你在Play Console中创建的应用内商品是否已设置为激活状态(草稿状态无法被调用),且商品ID要和代码中的premiuminstallation_1y完全一致(大小写、拼写、下划线都不能错)。
  • 签名配置:必须使用发布签名的APK/AAB进行测试,或者在Play Console的应用签名配置中添加你的debug签名SHA-1。如果用本地debug包直接测试,Google Play会因为签名不匹配拒绝连接,导致isAvailable()一直挂起。
  • 测试账号配置:如果用内部/封闭测试渠道,要确保你的测试账号已经被添加到Play Console的测试列表中,且安装的是从Play商店下载的测试版本,而非本地直接运行的包。

3. 检查AndroidManifest配置

确认你的AndroidManifest.xml中已添加必要的 billing 权限(虽然插件可能自动注入,但手动添加更保险):

<uses-permission android:name="com.android.vending.BILLING" />

同时确保应用已声明INTERNET权限(一般默认会加,但如果手动移除过会导致网络请求失败)。

4. 代码层面的优化与排查

  • enablePendingPurchases()的执行时机:你已经添加了这个初始化代码,但要确保它在调用InAppPurchase.instance之前执行,比如放在main函数最开头:
    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
      if (defaultTargetPlatform == TargetPlatform.android) {
        InAppPurchaseAndroidPlatformAddition.enablePendingPurchases();
      }
      runApp(MyApp());
    }
    
  • 给isAvailable()添加超时处理:避免代码一直卡死,你可以给异步调用加个超时限制,同时捕获超时信息:
    final bool available = await InAppPurchase.instance.isAvailable().timeout(
      const Duration(seconds: 10),
      onTimeout: () {
        print("连接Google Play超时");
        return false;
      },
    );
    
  • 更新插件版本:检查in_app_purchase的版本是否为最新版,旧版本可能存在Android端的兼容性问题,更新后再测试。

5. 排除模拟器问题

绝对不要用Android模拟器测试应用内购买功能!必须用真实的Android设备,模拟器的Play服务环境通常不完整,会导致各种奇怪的连接问题。

内容的提问来源于stack exchange,提问作者Jason Simard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:02:41