在 Flutter 中从 Play 商店获取产品时应用内购买崩溃

Posted

技术标签:

【中文标题】在 Flutter 中从 Play 商店获取产品时应用内购买崩溃【英文标题】:in-app purchase crashes when fetching products from the Play Store in Flutter 【发布时间】:2020-10-03 09:03:55 【问题描述】:

在安装和实施in-app purchase plugin Flutter 团队提供后,我遇到了一个问题。 到目前为止我做了什么:

    在 Play 商店中添加了 2 个可见且活跃的产品。 已提交构建以进行 Alpha 测试,因为这是应用内购买工作所必需的。 在应用启动时添加了InAppPurchaseConnection.enablePendingPurchases(); 向应用商店创建了一系列请求,其中最后一个请求失败并出现令人讨厌的日志,我无法解决
bool available = await _iap.isAvailable();
  if (!available) 
    print('=========> The store cannot be reached or accessed.');
   else 
    Set<String> _kIds = 'farm', 'forest';
    ProductDetailsResponse productsResponse = await _iap.queryProductDetails(_kIds);
    List<ProductDetails> products = productsResponse.productDetails;
        

    目前queryProductDetails 每次都崩溃并显示以下日志:
E/androidRuntime( 9053): java.lang.NoSuchMethodError: No virtual method getIntroductoryPriceCycles()Ljava/lang/String; in class Lcom/android/billingclient/api/SkuDetails; or its super classes (declaration of 'com.android.billingclient.api.SkuDetails' appears in /data/app/com.my.fancy.app-6ImcBn8ELPgiO8hTXXp_3Q==/base.apk)
E/AndroidRuntime( 9053):    at io.flutter.plugins.inapppurchase.Translator.fromSkuDetail(Translator.java:27)
E/AndroidRuntime( 9053):    at io.flutter.plugins.inapppurchase.Translator.fromSkuDetailsList(Translator.java:49)
E/AndroidRuntime( 9053):    at io.flutter.plugins.inapppurchase.MethodCallHandlerImpl$1.onSkuDetailsResponse(MethodCallHandlerImpl.java:185)
E/AndroidRuntime( 9053):    at com.android.billingclient.api.zzj.run(com.android.billingclient:billing@@3.0.0:8)
E/AndroidRuntime( 9053):    at android.os.Handler.handleCallback(Handler.java:873)
E/AndroidRuntime( 9053):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 9053):    at android.os.Looper.loop(Looper.java:193)
E/AndroidRuntime( 9053):    at android.app.ActivityThread.main(ActivityThread.java:6746)
E/AndroidRuntime( 9053):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 9053):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
E/AndroidRuntime( 9053):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

我尝试在多个示例项目上运行它,但都失败了。尝试了 Kotlin 和 Java 项目,只是想看看其中一个是否有问题,但没有运气。

编辑(已修复问题): 问题是导致此问题的 build.gradle 文件中链接的 billingClient 的结果。一旦我从 gradle 文件中删除它,一切都开始按预期工作。

【问题讨论】:

我通过删除 build.gradle 和 vending.Billing 上的计费客户端库解决了我的问题,并重新上传了一个新的 apk 我的项目也是如此。仅在配置文件中导入计费客户端的一行代码就被发布阻止了,压力太大了。并且发现没有人在 Flutter 上遇到过同样的问题,所以我可以从这些错误中吸取教训并更快地解决这个问题......感谢 Cajurao! 感谢 Cajurao,我还通过删除它们解决了我的问题(用于测试 iap)。但是在商店发布时可以吗?我需要重新添加它们吗? 令人惊讶的是它正在调试版本中工作。它仅在发布版本中崩溃,为什么?那么,解决方案是什么?我是否需要同时删除 gradle 文件中的 billingClient 依赖项以及清单文件中的 Billing 权限?如果我们删除这两个,那么应用内购买代码将如何工作?? @Z.Cajurao 谢谢伙计,但我真的希望你把它写成答案。 【参考方案1】:

这需要一段时间,但上述方法似乎都不适合我。我发现,因为我也在使用 RevenueCat,所以这两个依赖项发生了冲突。截至今天,将 purchase_flutter 解析为 1.2.1 而不是 1.4.3 为我解决了这个问题。

【讨论】:

【参考方案2】:

这也花了我一段时间,我是如何解决我的问题的:“in_app_purchase”包和“flutter_inapp_purchase”相互冲突。我删除了“flutter_inapp_purchase”并修复了它。

【讨论】:

以上是关于在 Flutter 中从 Play 商店获取产品时应用内购买崩溃的主要内容,如果未能解决你的问题,请参考以下文章

在 Play 商店中将 Flutter 应用程序从旧版本更新到新版本

Flutter 应用程序在构建 release-APK 时工作,但在通过 Google Play 商店提供时不工作

Flutter:升级Play商店的版本代码

是否有从 Google Play 商店检索应用产品收入的 API? [关闭]

从Play商店下载时,颤动的谷歌登录无法在发布中工作

如何使用 in_app_update 强制用户从 Flutter 中的 Play 商店更新应用