标签: flutter-in-app-purchase

Flutter in_app_purchase 导致 iOS 上未知的 SKError

我在 iOS 上的应用内支付方面遇到了困难。当我尝试启动应用程序时,我正在恢复过去的购买,有时我会收到代码为 0 的 SKError(未知错误)。我无法获取可用产品和购买清单。不知道是什么原因导致了错误,我已经为此苦苦挣扎了几天。

重要的是,有时它可以正常工作,有时却不能。安卓版本运行完美。

Xcode:14.2 Flutter版本:3.7.6 Dart版本:2.19.3我正在使用的包和版本:in_app_purchase:^3.1.5

出现问题的设备: iPhone Xs MAX、iOS 16.3.1 iPhone 6s、iOS 15.7.3 iPad Air 2、iOS 15.7.3

这是我在肘内的代码:

import 'dart:async';
import 'dart:io';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:in_app_purchase/in_app_purchase.dart';

part 'payments_state.dart';

class PaymentsCubit extends Cubit<PaymentsState> {
  PaymentsCubit()
      : super(PaymentsState(
          isPremium: null,
          avaliable: false,
          products: [],
          purchases: [],
        ));
  late StreamSubscription subscription;
  late InAppPurchase iap;

  void start() async {
    iap = InAppPurchase.instance;

    state.avaliable = await iap.isAvailable();
    if (state.avaliable) {
      //listener must be declared before get products and purchases calls …
Run Code Online (Sandbox Code Playgroud)

in-app-purchase ios flutter flutter-in-app-purchase

9
推荐指数
1
解决办法
1435
查看次数

使用 in_app_purchases 官方库在 Flutter 中使用促销代码实现订阅的应用内促销

我最近在我的应用中实现了应用内订阅。现在我正在为订阅添加促销代码。拥有促销代码的人可以试用 15 天,之后将被收取费用。

https://developer.android.com/google/play/billing/billing_promo

此处描述的我们可以通过为用户提供免费试用期来促销订阅。我在游戏控制台中创建了促销活动。但是当我购买订阅时,我无法添加兑换代码或促销代码(我的应用是否需要投入生产,或者我也可以在 alpha 轨道中进行测试)。

请指导我。

promotion-code in-app-subscription flutter flutter-plugin flutter-in-app-purchase

6
推荐指数
1
解决办法
1188
查看次数

在 android、flutter 中面临应用内购买消耗品的问题

支付流程工作完全正常,但是当使用慢速测试卡时,无法再次购买消耗品。使用的插件是 in_app_purchase: ^3.0.4。\n要重现该问题:

\n
    \n
  1. 购买带有“慢速测试卡,几分钟后批准”选项的产品。
  2. \n
  3. 一旦启动,然后关闭应用程序。
  4. \n
  5. 打开应用程序。购买流将被触发并await InAppPurchase.instance.completePurchase(purchaseDetails);成功运行该购买。\n但此后,当我尝试购买该产品时,Google Play 应用内购买处理程序会抛出错误:您已经拥有该商品。\n整个过程当应用程序在此过程中未关闭时,可以成功运行。
  6. \n
\n

而且我也无法将该产品转换回消耗品。

\n

代码片段

\n
purchaseParam=PurchaseParam(productDetails:selectedProduct);\nInAppPurchase.instance.buyConsumable(purchaseParam: purchaseParam);\n
Run Code Online (Sandbox Code Playgroud)\n
_subscription = purchaseUpdated.listen((purchaseDetailsList) {\n      log("initiating purchase stream");\n      p_purchaseList = purchaseDetailsList;\n      listenToPurchaseUpdated(purchaseDetailsList);\n    }, onDone: () {\n      log("done..");\n      _subscription.cancel();\n    }, onError: (error) {\n      log("error in payment is = $error");\n    }, \n);\n
Run Code Online (Sandbox Code Playgroud)\n
void listenToPurchaseUpdated(List<PurchaseDetails> purchaseDetailsList) async {\n  log("listening to purchases 1 ");\n  purchaseDetailsList.forEach((PurchaseDetails purchaseDetails) async {\n    if (purchaseDetails.status == PurchaseStatus.pending) {\n    } else {\n …
Run Code Online (Sandbox Code Playgroud)

android in-app-purchase google-play flutter flutter-in-app-purchase

5
推荐指数
0
解决办法
1143
查看次数

如何在 flutter 中获取应用内购买的唯一标识符,该标识符始终保持不变

我正在为我的 Flutter 应用程序使用应用程序内购买包。我的应用程序中有一项非消耗性应用程序内购买。每个用户创建一个用户帐户(使用 Firebase 身份验证)。一个用户可以与其他几个用户组成一个组,这些用户需要知道其他用户是否已付款。

我的想法如下:成功购买后,我想将purchaseDetails.purchaseID存储在数据库中(使用Firestore)。例如,如果用户随后在另一部手机上登录其用户帐户,则他们无需恢复购买。那么我就已经知道用户付款了。

此外,我仍然会实施恢复购买按钮。

我的问题是这样的:当我恢复购买时,我得到的PurchaseId 与以前不同。即使我尝试再次购买(App Store 告诉我我已经购买了该商品),之后我也会得到不同的 PurchasingID。

因此,用户可以创建一个帐户并购买该应用程序。然后在我的应用程序中创建一个新帐户,然后单击“恢复购买”。然后,我有两个帐户在我的数据库中列为已付费帐户,尽管只有一个帐户已付费。您可以根据需要多次重复此操作,例如将新帐户赠送给家人和朋友。

我是否有可能每次都获得相同的 ID?它不一定是PurchaseID。也许我可以保存其他东西(应用程序商店用户ID?)或者有一种完全不同的方法来解决我的问题?

当我过去处理订阅时,我使用了 RevenueCat。在那里,可以始终从同一个 App Store 或 Play Store 用户获取相同的 ID,以避免出现此问题。我现在也许也能做到。但如果可能的话,我实际上宁愿不使用 RevenueCat。

flutter flutter-in-app-purchase

5
推荐指数
1
解决办法
2191
查看次数

flutter in_app_pruchase - 消耗品计费库版本需要 4.0+

我正在尝试 in_app_purchase,到目前为止一切正常(即使有测试许可证和测试购买),除了消耗品。

当我尝试将 IAP 标记为消耗品时,开发人员控制台会告诉我以下内容:

“使用此功能需要计费库版本 4.0+”

我已经在 pubspec.yaml 依赖项中声明了

in_app_purchase: ^3.0.7

并且还测试了^3.0.6

我还设置了android/src/main/AndroidManifest.xml以下代码片段:

...
    <uses-permission android:name="com.android.vending.BILLING" />
...
        <meta-data
            android:name="com.google.android.play.billingclient.version"
            android:value="5.0.0" />
...
Run Code Online (Sandbox Code Playgroud)

我只使用内部测试轨道。

可能的原因有哪些?

  1. 是商户账户问题吗?
  2. 可能是游戏控制台的问题?
  3. 我是否忘记了项目中的某些内容?

预先感谢您的帮助

android in-app-purchase flutter google-play-console flutter-in-app-purchase

5
推荐指数
1
解决办法
2443
查看次数