flutter IAP 如何“恢复购买”

GPH*_*GPH 2 restore in-app-purchase flutter

我正在将flutter_inapp_purchase用于我的Flutter应用程序的非消费品 IAP。对于 IOS,它确实需要包含“恢复购买”功能,以允许用户恢复之前购买的应用内购买。我可以知道如何创建“恢复”按钮并在用户点击“恢复”按钮时启动恢复过程吗?

  Future<Null> _buyProduct(IAPItem item) async {
    try {
      PurchasedItem purchased= await 
  FlutterInappPurchase.buyProduct(item.productId);
      print('purcuased - ${purchased.toString()}');
    } catch (error) {
      print('$error');
    }
  }

  Future<Null> _getProduct() async {
    List<IAPItem> items = await FlutterInappPurchase.getProducts(_productLists);
    for (var item in items) {
      print('${item.toString()}');
      this._items.add(item);
    }

    setState(() {
      this._items = items;
    });
  }
Run Code Online (Sandbox Code Playgroud)

voy*_*tez 7

对于使用官方 flutter 开发包https://pub.dev/packages/in_app_purchase 的开发者:

恢复购买(iOS 非消耗品、自动续订订阅或非续订订阅所需)只是调用

Future<QueryPurchaseDetailsResponse> queryPastPurchases

在引擎盖下调用

_observer.getRestoredTransactions

你应该在这里做的是迭代所有状态为 PurchaseStatus.purchased 或 Purchase.error 的购买并调用

InAppPurchaseConnection.instance.completePurchase(purchase);

然后通过 Apple 验证收据并交付自有购买

取自 InAppPurchaseConnection 类:

/// 您负责完成每个 [PurchaseDetails],其 /// [PurchaseDetails.status] 为 [PurchaseStatus.purchased] 或 /// [[PurchaseStatus.error]。完成 [PurchaseStatus.pending] 购买 /// 将导致异常。/// /// 这会在 Android 上引发 [UnsupportedError]。

  • 如果从上次应用程序会话未完成购买(未在购买对象上调用 [completePurchase])。购买更新将在新的应用程序会话开始时发生。

无论如何,您可能会在应用程序启动时这样做,但 Apple 现在要求所有非消耗品和自动更新的应用程序内产品的恢复购买选项,否则您的应用程序将在审核过程中被拒绝。

https://developer.apple.com/documentation/storekit/in-app_purchase/offering_completing_and_restoring_in-app_purchases

如果您的应用销售非消耗品、自动续订订阅或非续订订阅产品,则您必须提供允许它们恢复的 UI。您的客户希望您的内容可以无限期地在他们的所有设备上使用;有关更多信息,请参阅应用内购买。