Implementation
static const Map<String, Map<String, dynamic>> validationRules = {
'logEvent': {
'required': ['name'],
},
'setUserId': {
'required': ['userId'],
},
// Screen tracking
'logScreenView': {
'required': ['screenName'],
'optional': ['screenClass', 'parameters'],
},
// User lifecycle
'logLogin': {
'optional': ['loginMethod', 'parameters'],
},
'logSignUp': {
'required': ['signUpMethod'],
'optional': ['parameters'],
},
'logAppOpen': {
'optional': ['parameters'],
},
// Content and interaction
'logSelectContent': {
'required': ['contentType', 'itemId'],
'optional': ['parameters'],
},
'logShare': {
'required': ['contentType', 'itemId', 'method'],
'optional': ['parameters'],
},
'logSearch': {
'required': ['searchTerm'],
'optional': ['numberOfNights', 'numberOfRooms', 'numberOfPassengers', 'origin', 'destination', 'startDate', 'endDate', 'travelClass', 'parameters'],
},
'logViewSearchResults': {
'required': ['searchTerm'],
'optional': ['parameters'],
},
// Gaming and achievements
'logLevelUp': {
'required': ['level'],
'optional': ['character', 'parameters'],
},
'logLevelStart': {
'required': ['levelName'],
'optional': ['parameters'],
},
'logLevelEnd': {
'required': ['levelName'],
'optional': ['success', 'parameters'],
},
'logPostScore': {
'required': ['score'],
'optional': ['level', 'character', 'parameters'],
},
'logUnlockAchievement': {
'required': ['achievementId'],
'optional': ['parameters'],
},
'logEarnVirtualCurrency': {
'required': ['virtualCurrencyName', 'value'],
'optional': ['parameters'],
},
'logSpendVirtualCurrency': {
'required': ['itemName', 'virtualCurrencyName', 'value'],
'optional': ['parameters'],
},
// Tutorial and onboarding
'logTutorialBegin': {
'optional': ['parameters'],
},
'logTutorialComplete': {
'optional': ['parameters'],
},
// Social features
'logJoinGroup': {
'required': ['groupId'],
'optional': ['parameters'],
},
// Marketing and attribution
'logGenerateLead': {
'optional': ['currency', 'value', 'parameters'],
},
'logCampaignDetails': {
'required': ['source', 'medium', 'campaign'],
'optional': ['term', 'content', 'aclid', 'cp1', 'parameters'],
},
'logAdImpression': {
'optional': ['adPlatform', 'adSource', 'adFormat', 'adUnitName', 'value', 'currency', 'parameters'],
},
// E-COMMERCE OPERATIONS
'logAddPaymentInfo': {
'optional': ['coupon', 'currency', 'paymentType', 'value', 'items', 'parameters'],
},
'logAddShippingInfo': {
'optional': ['coupon', 'currency', 'value', 'shippingTier', 'items', 'parameters'],
},
'logAddToCart': {
'optional': ['items', 'value', 'currency', 'parameters'],
},
'logAddToWishlist': {
'optional': ['items', 'value', 'currency', 'parameters'],
},
'logBeginCheckout': {
'optional': ['value', 'currency', 'items', 'coupon', 'parameters'],
},
'logPurchase': {
'optional': ['currency', 'coupon', 'value', 'items', 'tax', 'shipping', 'transactionId', 'affiliation', 'parameters'],
},
'logRemoveFromCart': {
'optional': ['currency', 'value', 'items', 'parameters'],
},
'logViewCart': {
'optional': ['currency', 'value', 'items', 'parameters'],
},
'logViewItem': {
'optional': ['currency', 'value', 'items', 'parameters'],
},
'logViewItemList': {
'optional': ['items', 'itemListId', 'itemListName', 'parameters'],
},
'logSelectItem': {
'optional': ['itemListId', 'itemListName', 'items', 'parameters'],
},
'logSelectPromotion': {
'optional': ['creativeName', 'creativeSlot', 'items', 'locationId', 'promotionId', 'promotionName', 'parameters'],
},
'logViewPromotion': {
'optional': ['creativeName', 'creativeSlot', 'items', 'locationId', 'promotionId', 'promotionName', 'parameters'],
},
'logRefund': {
'optional': ['currency', 'coupon', 'value', 'tax', 'shipping', 'transactionId', 'affiliation', 'items', 'parameters'],
},
// Configuration methods
'setUserProperty': {
'required': ['propertyName'],
'optional': ['propertyValue'],
},
'setAnalyticsCollectionEnabled': {
'required': ['enabled'],
},
'setConsent': {
'anyOf': ['adStorageConsentGranted', 'analyticsStorageConsentGranted', 'adPersonalizationSignalsConsentGranted', 'adUserDataConsentGranted', 'functionalityStorageConsentGranted', 'personalizationStorageConsentGranted', 'securityStorageConsentGranted'],
'message': 'At least one consent parameter required',
},
'setDefaultEventParameters': {
'required': ['defaultParameters'],
},
'setSessionTimeoutDuration': {
'anyOf': ['timeoutMilliseconds', 'timeout'],
'message': 'Either timeoutMilliseconds or timeout parameter required',
},
'resetAnalyticsData': {},
// iOS-specific conversion methods
'initiateOnDeviceConversionMeasurementWithEmailAddress': {
'required': ['emailAddress'],
},
'initiateOnDeviceConversionMeasurementWithPhoneNumber': {
'required': ['phoneNumber'],
},
'initiateOnDeviceConversionMeasurementWithHashedEmailAddress': {
'required': ['hashedEmailAddress'],
},
'initiateOnDeviceConversionMeasurementWithHashedPhoneNumber': {
'required': ['hashedPhoneNumber'],
},
};