我目前面临一个问题,即我的 Flutter 应用程序无法从 Google Play 商店获取消耗性应用内产品。但是,我的应用程序能够从 Apple 应用商店获取所有产品。
我无法确定我遗漏了哪一步,或者是什么导致我的所有产品 ID 都找不到。我正在使用 flutter 的 in_app_purchase 模块来促进应用内购买。
对于 Android,以下是我采取的设置步骤。
keytool -genkey -v -keystore c:\Users\USER_NAME\key.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias key
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>
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
}
}
}
创建了应用程序包并将其发布在封闭轨道下
flutter build appbundle --flavor prod --release
。当我上传工件时,我还让谷歌签署了我的应用程序“谷歌签名应用程序”。
我添加了一个与开发者帐户不关联的测试人员,并在“许可证测试”下添加了相同的电子邮件,许可证响应为“RESPOND_NORMALLY”。
我还创建了三个消耗品并将它们设置为活动状态。
以下显示了我获取产品的代码
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 相匹配。
问题终于解决了。在Android平台上,您需要在queryProductDetails()之前调用InAppPurchase方法isAvailable()。我不知道为什么你在 IOS 平台上不需要做同样的事情。
文档没有明确说明是否需要这样做,但在检查商店是否可用后查询产品可以解决我在 Android 上的问题。
问题得到了解决,因为我有两个独立的环境:开发
(dev)
和生产(prod)
。开发环境的包名称是 com.company.app.dev,而生产环境的包名称是 com.company.app。由于 Play 商店配置了包 ID com.company.app,因此开发环境无法获取产品,因为包名称与 Play 商店中注册的包名称不匹配。