purchase static method

Future<PurchaseResult> purchase(
  1. PurchaseParams purchaseParams
)

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.');
  }
}