扑动的in_app_purchase
插件已更新至版本0.3.0
,将 Google Play 库迁移到2.0.3
.
根据 Google Play Library v2,所有购买都必须在 3 天内(测试订单为 5 分钟)内得到确认,否则将被自动取消。
在最新的提交中in_app_purchase
,一种称为acknowledgePurchase
被添加到BillingClient
班级。
然而,当前记录的应用内购买方式是通过InAppPurchaseConnection.instance
它不提供任何确认购买的方法。
一个通用的实现in_app_purchase
看起来像这样:
// Listening for new purchases
final Stream purchaseUpdates = InAppPurchaseConnection.instance.purchaseUpdatedStream;
StreamSubscription<List<PurchaseDetails>> _subscription = purchaseUpdates.listen((purchases) {
_handlePurchaseUpdates(purchases);
});
// Product Details
ProductDetailsResponse _productDetailsResponse = await InAppPurchaseConnection.instance.queryProductDetails(this.productIDs.toSet());
// Past Purchases
QueryPurchaseDetailsResponse _purchaseDetailsResponse = await InAppPurchaseConnection.instance.queryPastPurchases();
// Making an nonConsumable purchase
PurchaseParam param = PurchaseParam(
productDetails: productDetails,
applicationUserName: null,
sandboxTesting: sandboxTesting
);
InAppPurchaseConnection.instance.buyNonConsumable(purchaseParam: param);
购买并验证后,产品就会交付。但是,我们如何在监听新购买的同时确认新购买,并在获取过去购买列表的同时确认旧购买(如果未确认)呢?
我也在寻找解决方案,看起来发行说明中对此进行了描述。https://pub.dev/packages/in_app_purchase#-changelog-tab- https://pub.dev/packages/in_app_purchase#-changelog-tab-
例如,在获取过去的购买时:
// at top class level (i.e. App wrapper)
InAppPurchaseConnection.enablePendingPurchases();
// inside class handling the purchases
final InAppPurchaseConnection _connection = InAppPurchaseConnection.instance;
// example use
final QueryPurchaseDetailsResponse purchaseResponse = await _connection.queryPastPurchases();
if (purchaseResponse.error != null) {
// (handle error)
} else {
// (purge local store)
await Future.forEach<PurchaseDetails>(
purchaseResponse.pastPurchases, (purchaseDetails) async {
if (await _verifyPurchase(purchaseDetails)) {
await //(insert purchase to local store);
final pending = Platform.isIOS
? purchaseDetails.pendingCompletePurchase
: !purchaseDetails.billingClientPurchase.isAcknowledged;
if (pending) {
await _connection.completePurchase(purchaseDetails);
}
}
}
);
}
以前,步_connection.competePurchase
原本只适用于 iOS,现在 Android 也需要它。
purchaseDetails.pendingCompletePurchase
如果需要完成购买(iOS 和 Android),则为 true。
purchaseDetails.billingClientPurchase.isAcknowledged
添加了对 Android 的额外检查以确保completePurchase
需要时执行。
0.3.0
“billing_client_wrappers”的其他更新:
对PurchaseWrapper 的更新:添加developerPayload、purchaseState 和isAcknowledged 字段。
“InAppPurchaseConnection”的更新:
[重大更改]:InAppPurchaseConnection.completePurchase 现在返回 Future 而不是 Future。 API 中还添加了新的可选参数 {StringdeveloperPayload}。在 Android 上,此 API 不再抛出异常,而是确认购买。如果在 Android 上 3 天内未完成购买,用户将获得退款。
[重大更改]:InAppPurchaseConnection.consumePurchase 现在返回 Future 而不是 Future。 API 中还添加了新的可选参数 {StringdeveloperPayload}。
新的布尔字段pendingCompletePurchase 已添加到PurchaseDetails 类中。它可以用作是否在购买时调用 InAppPurchaseConnection.completePurchase 的指示符。
[重大更改]:在 InAppPurchaseConnection 中添加了enablePendingPurchases。在 Android 上初始化 InAppPurchaseConnection 时,应用程序必须调用此方法。有关详细信息,请参阅启用待定购买。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)