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

7

我目前遇到的问题是,我的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>

我已经配置了我的 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
       }
   }
}

6. 创建了一个应用程序包并在封闭轨道下发布它 flutter build appbundle --flavor prod --release。在上传构件时,我还让谷歌签署了我的应用程序 "Google signing the app"。 7. 我添加了一个与开发者帐户没有关联的测试人员,并在 "许可证测试" 下添加了相同的电子邮件,使用许可证响应 "RESPOND_NORMALLY"。 8. 我还创建了三个可消耗产品并将它们设置为活动状态。
以下是获取产品的代码:
  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相匹配。 in-app-products 以下屏幕截图显示了我在alpha、closed track下发布的应用程序。 alpha track

是的,它是正确的。对于所有三个产品来说完全匹配。 - desap
请问您能否提供一些Google控制台的截图? - ch271828n
@ch271828n 已更新并附上截图。 - desap
我不确定。为什么要谈论网络流量是因为您正在使用封装的API(InAppPurchase),这可能会有微妙的错误。因此,我们需要检查发送到Google的原始数据(原始HTTP请求)。 - ch271828n
好的,很有道理。总会有错误的可能性,但知道这是一个由Flutter官方支持的第一方库可能很重要。无论如何,我能够通过wireshark收集到谷歌Play和我的应用程序之间发送的相当多的数据包。我使用DNS协议保存了这些数据包,使用QUIC协议保存了随后的数据包。不过,我不确定如何从这些数据包中提取出更多的信息。 - desap
显示剩余6条评论
1个回答

5
问题终于得到了解决。在安卓平台上,在查询产品详细信息(queryProductDetails())之前,需要先调用InAppPurchase方法中的isAvailable()。我不确定为什么在IOS平台上不需要这样做。
文档没有明确说明这一点,但要让它成立,在检查商店是否可用后再查询产品可以解决我的安卓问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接