purchase method
Future<void>
purchase({
- required PurchaseProduct product,
- required VoidCallback onDone,
- PurchaseProduct? replacedProduct,
override
Process the purchase of product.
productの購入処理を行います。
Implementation
@override
Future<void> purchase({
required PurchaseProduct product,
required VoidCallback onDone,
PurchaseProduct? replacedProduct,
}) async {
final userId = onRetrieveUserId.call();
if (product is _StoreConsumablePurchaseProduct) {
final purchaseParam = PurchaseParam(
productDetails: product.productDetails,
applicationUserName: userId ?? product.userId,
);
if (!await _iap.buyConsumable(
purchaseParam: purchaseParam,
autoConsume: automaticallyConsumeOnAndroid || _platformInfo.isIOS,
)) {
throw Exception("Purchase failed or was canceled.");
}
} else if (product is _StoreNonConsumablePurchaseProduct) {
final purchaseParam = PurchaseParam(
productDetails: product.productDetails,
applicationUserName: userId ?? product.userId,
);
if (!await _iap.buyNonConsumable(purchaseParam: purchaseParam)) {
throw Exception("Purchase failed or was canceled.");
}
} else if (product is _StoreSubscriptionPurchaseProduct) {
final changeSubscription =
await _getReplacedPurchaseDetails(replacedProduct: replacedProduct);
final purchaseParam = _platformInfo.isAndroid
? GooglePlayPurchaseParam(
productDetails: product.productDetails,
applicationUserName: userId ?? product.userId,
changeSubscriptionParam: changeSubscription != null
? ChangeSubscriptionParam(
oldPurchaseDetails: changeSubscription,
replacementMode: ReplacementMode.withTimeProration,
// prorationMode: ProrationMode.immediateWithTimeProration,
)
: null,
)
: PurchaseParam(
productDetails: product.productDetails,
applicationUserName: userId ?? product.userId,
);
if (!await _iap.buyNonConsumable(purchaseParam: purchaseParam)) {
throw Exception("Purchase failed or was canceled.");
}
} else {
throw Exception("Product not found: ${product.productId}");
}
}