Flutter Android:无法从 Google Play 获取应用内商品

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

我目前遇到的问题是我的 Flutter 应用程序无法从 Google Play 商店获取可消费的应用内商品。但是,我的应用程序能够从 Apple 应用程序商店获取所有产品。

我无法确定我遗漏了哪一步,或者是什么导致找不到我的所有产品 ID。我正在使用 flutter 的 in_app_purchase 模块来促进应用内购买。

对于 Android,这是我执行的设置步骤。

  1. 我已经设置了我的 Google Play 控制台和开发者帐户
  2. 已完成“设置您的应用”部分中的所有任务
  3. 生成了一个密钥库文件来签署我的应用程序 keytool -genkey -v -keystore c:\Users\USER_NAME\key.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias key
  4. 创建了一个名为 /android/key.properties 的文件,其中包含对我的密钥库文件的引用。该文件的内容如下所示:
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>
  1. 配置我的 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
       }
   }
}
  1. 创建了一个 app bundle 并在封闭轨道下发布了它 flutter build appbundle --flavor prod --release。当我上传工件时,我还让 google 签署我的应用程序“Google 签署应用程序”。

  2. 我添加了一个与开发者帐户无关的测试人员,并在“许可测试”下添加了相同的电子邮件,许可响应为“RESPOND_NORMALLY”。

  3. 我还创建了三个消耗品并将它们设置为活动状态。

下面是我获取产品的代码

  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}");

如有任何提示或建议,我们将不胜感激。

编辑:以下屏幕截图显示了 google 控制台上我的应用内商品页面。我已经掩盖了某些标识符以保护我的隐私,但是屏幕截图中的产品 ID 与我的代码中的产品 ID 相匹配。

以下屏幕截图显示了我在 alpha 封闭轨道下发布的应用程序。

问题终于解决了。在 Android 平台上,您需要在 queryProductDetails() 之前调用 InAppPurchase 方法 isAvailable()。我不确定为什么您在 IOS 平台上不需要做同样的事情。

文档没有明确说明是否需要这样做,但假设在检查商店是否可用后查询产品解决了我在 Android 上的问题。