logRevenueOutcome method

Future<void> logRevenueOutcome(
  1. ProductDetails product, {
  2. Outcome outcome = Outcome.positive,
})

Implementation

Future<void> logRevenueOutcome(ProductDetails product, {Outcome outcome = Outcome.positive}) {
  if (!_contextId.isValid()) {
    print(
        "[ContextSDK] Invalid context received, please contact support@contextsdk.com");
    return Future.value();
  }

  return appendOutcomeMetadata({
    'ctx_revenue': product.rawPrice,
    'ctx_currency': product.currencyCode,
    'ctx_revenue_source': 'in_app_purchase',
    'ctx_flutter_product_type': product.runtimeType.toString(),
  })
  .then((_) {
    if (product is AppStoreProduct2Details) {
      final subscription = product.sk2Product.subscription;
      Map<String, dynamic> metadata = {
        'ctx_recurrence': 'one_time_purchase',
      };
      if (subscription != null) {
        metadata['ctx_recurrence_unit'] = subscription.subscriptionPeriod.unit.name;
        metadata['ctx_recurrence_interval'] = subscription.subscriptionPeriod.value;
        metadata['ctx_recurrence'] = 'recurring';

        final promotionalOffer = subscription.promotionalOffers.firstOrNull;
        if (promotionalOffer != null) {
          metadata['ctx_intro_offer_price'] = promotionalOffer.price;
          metadata['ctx_intro_offer_period'] = promotionalOffer.period.unit.name;
          metadata['ctx_intro_offer_duration'] = promotionalOffer.period.value;
        }
      }

      return appendOutcomeMetadata(metadata);
    } else if (product is AppStoreProductDetails) {
      final subscription = product.skProduct.subscriptionPeriod;
      Map<String, dynamic> metadata = {
        'ctx_recurrence': 'one_time_purchase',
      };
      if (subscription != null) {
        metadata['ctx_recurrence_unit'] = subscription.unit.name;
        metadata['ctx_recurrence_interval'] = subscription.numberOfUnits;
        metadata['ctx_recurrence'] = 'recurring';
      }

      return appendOutcomeMetadata(metadata);
    } else {
      return Future.value();
    }
  })
  .then((_) {
    return log(outcome);
  });
}