purchase static method
Implementation
static Future<PurchaseResult> purchase(
PurchaseParams purchaseParams,
) async {
final package = purchaseParams.package;
final storeProduct = purchaseParams.product;
final subscriptionOption = purchaseParams.subscriptionOption;
final googleProductChangeInfo = purchaseParams.googleProductChangeInfo;
final googleIsPersonalizedPrice = purchaseParams.googleIsPersonalizedPrice;
final prorationMode = googleProductChangeInfo?.prorationMode?.value;
final signedDiscountTimestamp = purchaseParams.promotionalOffer?.timestamp.toString();
final winBackOffer = purchaseParams.winBackOffer;
final customerEmail = purchaseParams.customerEmail;
final presentedOfferingContext = purchaseParams.package?.presentedOfferingContext ??
purchaseParams.product?.presentedOfferingContext ??
purchaseParams.subscriptionOption?.presentedOfferingContext;
final presentedOfferingContextJson = presentedOfferingContext?.toJson();
final purchaseArgs = <String, dynamic>{
'googleOldProductIdentifier': googleProductChangeInfo?.oldProductIdentifier,
'googleProrationMode': prorationMode,
'googleIsPersonalizedPrice': googleIsPersonalizedPrice,
'signedDiscountTimestamp': signedDiscountTimestamp,
'presentedOfferingContext': presentedOfferingContextJson,
'customerEmail': customerEmail,
'winBackOfferIdentifier': winBackOffer?.identifier,
};
final isWinBackOfferPurchase = (defaultTargetPlatform == TargetPlatform.iOS
|| defaultTargetPlatform == TargetPlatform.macOS)
&& winBackOffer != null;
if (package != null) {
final methodName = isWinBackOfferPurchase
? 'purchasePackageWithWinBackOffer'
: 'purchasePackage';
return await _invokeReturningPurchaseResult(methodName, {
...purchaseArgs,
'packageIdentifier': package.identifier,
});
} else if (storeProduct != null) {
if (kIsWeb) {
throw UnsupportedPlatformException();
}
final methodName = isWinBackOfferPurchase
? 'purchaseProductWithWinBackOffer'
: 'purchaseProduct';
return await _invokeReturningPurchaseResult(methodName, {
...purchaseArgs,
'productIdentifier': storeProduct.identifier,
'type': storeProduct.productCategory?.name,
});
} else if (subscriptionOption != null) {
if (defaultTargetPlatform != TargetPlatform.android) {
throw UnsupportedPlatformException();
}
return await _invokeReturningPurchaseResult('purchaseSubscriptionOption', {
...purchaseArgs,
'productIdentifier': subscriptionOption.productId,
'optionIdentifier': subscriptionOption.id,
});
} else {
throw ArgumentError('One of package, product or subscriptionOption must be set in PurchaseParams.');
}
}