![](/img/trans.png)
[英]Unable to use Purchase.Subscription:acknowledge to acknowledge a subscription
[英]acknowledge a purchase using Flutter
Flutter 的in_app_purchase
插件已更新至0.3.0
版本,將 Google Play 庫遷移至2.0.3
。
根據 Google Play Library v2,所有購買必須在 3 天內(或測試訂單為 5 分鍾)內確認,否則將自動取消。
在in_app_purchase
的最新提交中, BillingClient
類中添加了一個名為acknowledgePurchase
的方法。 但是,當前記錄在案的應用內購買方式是通過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-
例如,在獲取過去的購買時:
// 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);
}
}
}
);
}
以前,step _connection.competePurchase
僅適用於 iOS,現在 Android 也需要它。
如果購買需要完成(iOS 和 Android),則purchaseDetails.pendingCompletePurchase
為 true。
purchaseDetails.billingClientPurchase.isAcknowledged
添加了針對 Android 的額外檢查,以確保在需要時執行completePurchase
。
0.3.0
“billing_client_wrappers”的其他更新: 對 PurchaseWrapper 的更新:添加 developerPayload、purchaseState 和 isAcknowledged 字段。
對“InAppPurchaseConnection”的更新:[重大變化]:InAppPurchaseConnection.completePurchase 現在返回 Future 而不是 Future。 API 中還添加了一個新的可選參數 {String developerPayload}。 在 Android 上,此 API 不再拋出異常,而是確認購買。 如果在 Android 上 3 天內未完成購買,用戶將獲得退款。
[重大變化]:InAppPurchaseConnection.consumePurchase 現在返回 Future 而不是 Future。 API 中還添加了一個新的可選參數 {String developerPayload}。 一個新的布爾字段 pendingCompletePurchase 已添加到 PurchaseDetails 類中。 可以作為是否在購買時調用 InAppPurchaseConnection.completePurchase 的指標。
[重大更改]:在 InAppPurchaseConnection 中添加了 enablePendingPurchases。 在 Android 上初始化 InAppPurchaseConnection 時,應用程序必須調用此方法。 有關更多信息,請參閱 enablePendingPurchases。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.