android - flutter Android : Unable to fetch in-app products from Google Play

标签 android flutter google-play in-app-purchase in-app-billing

我目前面临的问题是我的 Flutter 应用程序无法从 Google Play 商店获取可消费的应用内产品。但是,我的应用程序能够从 Apple 应用商店获取所有产品。
我无法确定我缺少哪个步骤,或者是什么导致我的所有产品 ID 都找不到。我正在使用 flutter 的in_app_purchase模块以促进应用内购买。
对于 Android,这是我采取的设置步骤。

  • 我已经设置了我的 Google Play 控制台和开发者帐户
  • 已完成设置您的应用部分中的所有任务
  • 生成了一个 keystore 文件来签署我的应用程序keytool -genkey -v -keystore c:\Users\USER_NAME\key.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias key
  • 创建了一个名为/android/key.properties 的文件,其中包含对我的 keystore 文件的引用。该文件的内容如下所示:
  • storePassword=<password from previous step>
    keyPassword=<password from previous step>
    keyAlias=key
    storeFile=<location of the key store file, such as /Users/<user name>/key.jks>
    
  • 将我的 build.gradle 文件配置为包含以下
  • def keystoreProperties = new Properties()
    def keystorePropertiesFile = rootProject.file('key.properties')
    if (keystorePropertiesFile.exists()) {
       keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    }
    android {
       signingConfigs {
           release {
               keyAlias keystoreProperties['keyAlias']
               keyPassword keystoreProperties['keyPassword']
               storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
               storePassword keystoreProperties['storePassword']
           }
       }
       buildTypes {
           release {
               signingConfig signingConfigs.release
           }
       }
    }
    
  • 创建了一个 app bundle 并在封闭轨道 flutter build appbundle --flavor prod --release 下发布.当我上传工件时,我还让谷歌签署我的应用程序“谷歌签署应用程序”。
  • 我添加了一个与开发者帐户无关的测试人员,并在“许可测试”下添加了相同的电子邮件,许可响应为“RESPOND_NORMALLY”。
  • 我还创建了三种消耗品并将它们设置为 Activity 状态。

  • 下面显示了我获取产品的代码
      List<String> _kProductIds = <String>[
        'my_app_premium_year_c',
        'my_app_premium_month_c',
        'my_app_premium_week_c'
      ];
    final ProductDetailsResponse productResponse =
            await InAppPurchase.instance.queryProductDetails(_kProductIds.toSet());
    
    下面显示了我得到的意外结果。那就是我所有的产品都在 notFoundIDs 列表中。 [my_app_premium_year_c, my_app_premium_month_c, my_app_premium_week_c]当包含以下代码时,我希望 notFoundIDs 列表为空print("ProductIDs not found: ${productResponse.notFoundIDs}");任何提示或建议将不胜感激。
    编辑:以下屏幕截图显示了我在谷歌控制台上的应用内产品页面。我掩盖了某些标识符以保护我的隐私,但是屏幕截图中的产品 ID 与我的代码中的产品 ID 匹配。
    in-app-products
    以下屏幕截图显示了我在 alpha 封闭轨道下发布的应用程序。
    alpha track

    最佳答案

    问题终于解决了。在 Android 平台上,您需要在 queryProductDetails() 之前调用 InAppPurchase 方法 isAvailable()。我不确定为什么在 IOS 平台上不需要这样做。
    文档没有明确说明需要这样做,但让它代表在检查商店是否可用后查询产品解决了我在 Android 上的问题。

    关于android - flutter Android : Unable to fetch in-app products from Google Play,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71668207/

    相关文章:

    java - 在 Android 应用程序 (Firebase) 上添加多个条目

    android - 测试 Android IAP/应用内购买订阅

    android - 访问 Android Play API 以进行订阅

    ios - Flutter 应用程序停留在物理 iPhone 的安装和启动步骤

    android - 如何将不同的 firebase 数据库连接到 release/beta/alpha 版本?

    java - 我如何暂停执行代码直到动画完成

    java - 如何在 EditText 中插入文本?

    android - 如何以编程方式查找 Android 中的坏点

    android - 使用 Flutter 将图像上传到通用 Google Drive 帐户

    flutter - 折线没有出现在谷歌地图上 - Flutter