logRevenueOutcome method
Future<void>
logRevenueOutcome(
- ProductDetails product, {
- 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);
});
}