mm-app-analytics-js-sdk
v1.0.1
Published
MediaMelon Application Analytics SDK
Maintainers
Readme
MediaMelon App Analytics SDK
A comprehensive JavaScript SDK for tracking user behavior, video engagement, monetization events, and application analytics in web applications.
Features
- 🎯 Core Analytics: User tracking, screen tracking, app state monitoring
- 🎥 Video Analytics: Video engagement, quality tracking, user interactions
- 💰 Monetization Tracking: Subscription management, payment tracking, ad analytics
- 🔬 Experiment & Feature Tracking: A/B testing, feature flags, user segmentation
- 🤖 Auto-Collection: Automatic event capture, performance monitoring, error tracking
- 🌳 Tree Shaking Support: Optimized for bundle size reduction
Installation
NPM Installation
npm install mm-app-analytics-js-sdkCDN Installation
<!-- ES Module (Recommended for modern bundlers) -->
<script type="module">
import { MMAppAnalyticsSDK } from 'https://unpkg.com/[email protected]/mm-app-analytics-js-sdk.min.js';
</script>
<!-- Browser Bundle (IIFE) - Modern browsers -->
<script src="https://unpkg.com/[email protected]/mm-app-analytics-js-sdk.min.js"></script>
<!-- ES5 Bundle - Legacy browsers (IE 11+) -->
<script src="https://unpkg.com/[email protected]/mm-app-analytics-js-sdk.es5.min.js"></script>Browser Compatibility
The SDK provides multiple builds for different browser environments:
mm-app-analytics-js-sdk.min.js- Modern ES6+ build (Chrome 50+, Firefox 50+, Safari 10+, Edge 14+)mm-app-analytics-js-sdk.es5.min.js- ES5 compatible build (IE 11+, older browsers)mm-app-analytics-js-sdk.esm.js- ES Module build for bundlers
Choose the appropriate build based on your browser support requirements.
Quick Start
NPM Usage
import { MMAppAnalyticsSDK } from 'mm-app-analytics-js-sdk';
// Initialize the SDK
const analytics = new MMAppAnalyticsSDK();
// Initialize with required parameters
await analytics.initialize(
'your-customer-id',
'your-app-id',
'Your App Name',
'1.0.0'
);
// Track events
analytics.reportVideoStart({
videoId: "1234",
title: "Sample Video",
duration: 2400,
quality: "1080p"
});HTML Usage
<!DOCTYPE html>
<html>
<head>
<title>Analytics Demo</title>
</head>
<body>
<!-- Include the SDK -->
<script src="https://unpkg.com/[email protected]/mm-app-analytics-js-sdk.min.js"></script>
<script>
// Initialize the SDK
const analytics = new MMAppAnalyticsSDK();
// Initialize with required parameters
analytics.initialize(
'your-customer-id',
'your-app-id',
'Your App Name',
'1.0.0'
).then(() => {
console.log('SDK initialized successfully');
// Track events
analytics.reportVideoStart({
videoId: "1234",
title: "Sample Video",
duration: 2400,
quality: "1080p"
});
});
</script>
</body>
</html>ES5 Usage (Legacy Browsers)
<!DOCTYPE html>
<html>
<head>
<title>Analytics Demo - ES5</title>
</head>
<body>
<!-- Include the ES5 SDK -->
<script src="https://unpkg.com/[email protected]/mm-app-analytics-js-sdk.es5.min.js"></script>
<script>
// Initialize the SDK (ES5 compatible)
var analytics = new MMAppAnalyticsSDK();
// Initialize with required parameters
analytics.initialize(
'your-customer-id',
'your-app-id',
'Your App Name',
'1.0.0'
).then(function() {
console.log('SDK initialized successfully');
// Track events
analytics.reportVideoStart({
videoId: "1234",
title: "Sample Video",
duration: 2400,
quality: "1080p"
});
}).catch(function(error) {
console.error('SDK initialization failed:', error);
});
</script>
</body>
</html>Advanced Configuration
With User Information
const userInfo = {
userId: "user123",
email: "[email protected]",
phoneNumber: "+1234567890",
demographics: {
age: 25,
gender: "female",
region: "US-West"
}
};
const sdkConfig = {
debug: true,
logLevel: 'info',
offlineQueueSize: 1000,
batchSize: 50,
batchIntervalMs: 5000,
autoCollect: {
enabled: true,
session: true,
navigation: true,
clicks: true,
scrolls: true
}
};
await analytics.initialize(
'your-customer-id',
'your-app-id',
'Your App Name',
'1.0.0',
userInfo,
sdkConfig
);API Reference
MediaMelon App Analytics JS SDK - API Reference Table
| API | Parameters | Example Code |
|-----|------------|--------------|
| reportVideoStart(data) | Mandatory:- data.assetId (string): Video asset identifier- data.assetName (string): Video asset name- data.duration (number): Video duration in seconds- data.position (number): Starting position in seconds- data.quality (string): Video quality- data.reason (string): Reason for video startOptional:- data.genre (string): Video genre- data.metadata (object): Additional metadata- data.playbackSpeed (number): Playback speed- data.bufferingTime (number): Buffering time in milliseconds- data.bitrate (number): Video bitrate- data.resolution (string): Video resolution- data.playerVersion (string): Player version- data.playerType (string): Player type | javascript<br>mmAnalytics.reportVideoStart({<br> assetId: "video_123",<br> assetName: "Sample Video",<br> duration: 3600,<br> position: 0,<br> quality: "1080p",<br> reason: "user_click",<br> genre: "action",<br> playbackSpeed: 1.0,<br> metadata: {<br> category: "movies",<br> language: "en"<br> }<br>});<br> |
| reportVideoPause(data) | Mandatory: Same as reportVideoStart | javascript<br>mmAnalytics.reportVideoPause({<br> assetId: "video_123",<br> assetName: "Sample Video",<br> duration: 3600,<br> position: 120,<br> quality: "1080p",<br> reason: "user_pause"<br>});<br> |
| reportVideoResume(data) | Mandatory: Same as reportVideoStart | javascript<br>mmAnalytics.reportVideoResume({<br> assetId: "video_123",<br> assetName: "Sample Video",<br> duration: 3600,<br> position: 120,<br> quality: "1080p",<br> reason: "user_resume"<br>});<br> |
| reportVideoEnd(data) | Mandatory: Same as reportVideoStart | javascript<br>mmAnalytics.reportVideoEnd({<br> assetId: "video_123",<br> assetName: "Sample Video",<br> duration: 3600,<br> position: 3600,<br> quality: "1080p",<br> reason: "video_complete"<br>});<br> |
| reportVideoSkip(data) | Mandatory: Same as reportVideoStart | javascript<br>mmAnalytics.reportVideoSkip({<br> assetId: "video_123",<br> assetName: "Sample Video",<br> duration: 3600,<br> position: 300,<br> quality: "1080p",<br> reason: "user_skip"<br>});<br> |
| reportVideoStop(data) | Mandatory: Same as reportVideoStart | javascript<br>mmAnalytics.reportVideoStop({<br> assetId: "video_123",<br> assetName: "Sample Video",<br> duration: 3600,<br> position: 180,<br> quality: "1080p",<br> reason: "user_stop"<br>});<br> |
| reportVideoQuality(data) | Mandatory:- data.assetId (string): Video asset identifier- data.oldQuality (string): Previous quality- data.newQuality (string): New qualityOptional:- data.metadata (object): Additional metadata | javascript<br>mmAnalytics.reportVideoQuality({<br> assetId: "video_123",<br> oldQuality: "720p",<br> newQuality: "1080p",<br> metadata: {<br> reason: "bandwidth_improvement"<br> }<br>});<br> |
| reportVideoBuffering(data) | Mandatory:- data.assetId (string): Video asset identifier- data.duration (number): Buffering duration in millisecondsOptional:- data.metadata (object): Additional metadata | javascript<br>mmAnalytics.reportVideoBuffering({<br> assetId: "video_123",<br> duration: 2000,<br> metadata: {<br> reason: "network_issue"<br> }<br>});<br> |
| reportVideoShared(data) | Mandatory:- data.assetId (string): Video asset identifierOptional:- data.assetName (string): Video asset name- data.sharedTo (string): Platform shared to- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportVideoShared({<br> assetId: "video_123",<br> assetName: "Sample Video",<br> sharedTo: "facebook",<br> metadata: {<br> shareType: "social"<br> }<br>});<br> |
| reportVideoBookmarked(data) | Mandatory:- data.assetId (string): Video asset identifierOptional:- data.assetName (string): Video asset name- data.type (string): Bookmark type- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportVideoBookmarked({<br> assetId: "video_123",<br> assetName: "Sample Video",<br> type: "favorite",<br> metadata: {<br> listName: "my_favorites"<br> }<br>});<br> |
| reportVideoLiked(data) | Mandatory:- data.assetId (string): Video asset identifierOptional:- data.assetName (string): Video asset name- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportVideoLiked({<br> assetId: "video_123",<br> assetName: "Sample Video",<br> metadata: {<br> likeType: "thumbs_up"<br> }<br>});<br> |
| reportVideoComment(data) | Mandatory:- data.assetId (string): Video asset identifierOptional:- data.assetName (string): Video asset name- data.comment (string): Comment text- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportVideoComment({<br> assetId: "video_123",<br> assetName: "Sample Video",<br> comment: "Great video!",<br> metadata: {<br> commentType: "user_review"<br> }<br>});<br> |
| reportVideoRating(data) | Mandatory:- data.assetId (string): Video asset identifierOptional:- data.assetName (string): Video asset name- data.rating (number): Rating value (1-5)- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportVideoRating({<br> assetId: "video_123",<br> assetName: "Sample Video",<br> rating: 5,<br> metadata: {<br> ratingType: "star_rating"<br> }<br>});<br> |
| reportVideoQualityChange(data) | Mandatory:- data.assetId (string): Video asset identifier- data.assetName (string): Video asset name- data.quality (string): Current quality- data.reason (string): Reason for quality changeOptional:- data.oldQuality (string): Previous quality- data.newQuality (string): New quality- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportVideoQualityChange({<br> assetId: "video_123",<br> assetName: "Sample Video",<br> quality: "1080p",<br> reason: "auto_adjustment",<br> oldQuality: "720p",<br> newQuality: "1080p"<br>});<br> |
| reportVideoPlaybackSpeedChange(data) | Mandatory:- data.assetId (string): Video asset identifierOptional:- data.assetName (string): Video asset name- data.oldSpeed (number): Previous playback speed- data.newSpeed (number): New playback speed- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportVideoPlaybackSpeedChange({<br> assetId: "video_123",<br> assetName: "Sample Video",<br> oldSpeed: 1.0,<br> newSpeed: 1.5<br>});<br> |
| reportScreenView(screenView) | Mandatory:- screenView.screenName (string): Screen name- screenView.screenId (string): Screen identifierOptional:- screenView.timestamp (number): Event timestamp- screenView.metadata (object): Additional metadata | javascript<br>mmAnalytics.reportScreenView({<br> screenName: "Home Screen",<br> screenId: "home_screen_001",<br> timestamp: Date.now(),<br> metadata: {<br> source: "navigation"<br> }<br>});<br> |
| reportScreenExit(data) | Mandatory:- data.screenName (string): Screen name- data.screenId (string): Screen identifier- data.duration (number): Time spent on screen in millisecondsOptional:- data.timestamp (number): Event timestamp- data.metadata (object): Additional metadata | javascript<br>mmAnalytics.reportScreenExit({<br> screenName: "Home Screen",<br> screenId: "home_screen_001",<br> duration: 45000,<br> timestamp: Date.now(),<br> metadata: {<br> exitMethod: "back_button"<br> }<br>});<br> |
| reportAppState(appState) | Mandatory:- appState.state (string): App state ("foreground" or "background")Optional:- appState.timestamp (number): Event timestamp- appState.metadata (object): Additional metadata | javascript<br>mmAnalytics.reportAppState({<br> state: "foreground",<br> timestamp: Date.now(),<br> metadata: {<br> trigger: "user_interaction"<br> }<br>});<br> |
| reportAppError(error) | Mandatory:- error.errorType (string): Type of error- error.message (string): Error messageOptional:- error.stack (string): Error stack trace- error.source (string): Error source file- error.line (number): Error line number- error.column (number): Error column number- error.metadata (object): Additional metadata | javascript<br>mmAnalytics.reportAppError({<br> errorType: "network_error",<br> message: "Failed to fetch data",<br> stack: error.stack,<br> source: "api.js",<br> line: 45,<br> column: 12,<br> metadata: {<br> endpoint: "/api/data"<br> }<br>});<br> |
| reportPerformanceMetrics(data) | Mandatory:- data (object): Performance metrics dataOptional:- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportPerformanceMetrics({<br> loadTime: 1200,<br> renderTime: 800,<br> memoryUsage: 45.6,<br> metadata: {<br> page: "dashboard"<br> }<br>});<br> |
| reportUserInfo(userInfo) | Mandatory:- userInfo (object): User information objectOptional:- Additional user data (key-value pairs) | javascript<br>mmAnalytics.reportUserInfo({<br> userId: "user_123",<br> email: "[email protected]",<br> name: "John Doe",<br> age: 25,<br> location: "New York"<br>});<br> |
| reportUserSignUp(data) | Mandatory:- data.userId (string): User identifier- data.email (string): User email addressOptional:- data.name (string): User name- data.age (number): User age- data.source (string): Sign up source- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportUserSignUp({<br> userId: "user_123",<br> email: "[email protected]",<br> name: "John Doe",<br> age: 25,<br> source: "email_campaign",<br> metadata: {<br> referralCode: "REF123"<br> }<br>});<br> |
| reportUserSignIn(data) | Mandatory:- data.userId (string): User identifier- data.email (string): User email addressOptional:- data.method (string): Sign in method- data.device (string): Device type- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportUserSignIn({<br> userId: "user_123",<br> email: "[email protected]",<br> method: "email_password",<br> device: "mobile",<br> metadata: {<br> ipAddress: "192.168.1.1"<br> }<br>});<br> |
| reportUserSignOut(data) | Mandatory:- data.userId (string): User identifier- data.email (string): User email addressOptional:- data.reason (string): Sign out reason- data.sessionDuration (number): Session duration in milliseconds- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportUserSignOut({<br> userId: "user_123",<br> email: "[email protected]",<br> reason: "user_logout",<br> sessionDuration: 3600000,<br> metadata: {<br> logoutMethod: "button_click"<br> }<br>});<br> |
| reportUserIdentification(data) | Mandatory:- data (object): User identification dataOptional:- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportUserIdentification({<br> anonymousId: "anon_456",<br> userId: "user_123",<br> email: "[email protected]",<br> metadata: {<br> identificationMethod: "login"<br> }<br>});<br> |
| reportUserSessionStart(data) | Mandatory:- data (object): User session dataOptional:- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportUserSessionStart({<br> sessionId: "session_789",<br> userId: "user_123",<br> timestamp: Date.now(),<br> metadata: {<br> source: "app_launch"<br> }<br>});<br> |
| reportUserSessionEnd(data) | Mandatory:- data (object): User session dataOptional:- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportUserSessionEnd({<br> sessionId: "session_789",<br> userId: "user_123",<br> duration: 1800000,<br> metadata: {<br> reason: "app_close"<br> }<br>});<br> |
| reportUserPreferenceChange(data) | Mandatory:- data (object): User preference dataOptional:- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportUserPreferenceChange({<br> userId: "user_123",<br> preference: "theme",<br> oldValue: "light",<br> newValue: "dark",<br> metadata: {<br> changeSource: "settings_page"<br> }<br>});<br> |
| reportUserProfileUpdate(data) | Mandatory:- data.userId (string): User identifier- data.updatedFields (array): List of updated fieldsOptional:- Additional profile data (key-value pairs) | javascript<br>mmAnalytics.reportUserProfileUpdate({<br> userId: "user_123",<br> updatedFields: ["name", "avatar"],<br> name: "Jane Doe",<br> avatar: "avatar_url",<br> metadata: {<br> updateSource: "profile_edit"<br> }<br>});<br> |
| reportUserClick(metadata) | Mandatory:- metadata.elementId (string): Element identifier- metadata.elementType (string): Element type- metadata.pageUrl (string): Page URL- metadata.position (object): Click position- metadata.timestamp (number): Event timestampOptional:- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportUserClick({<br> elementId: "btn_subscribe",<br> elementType: "button",<br> pageUrl: "https://example.com/pricing",<br> position: {<br> x: 150,<br> y: 200<br> },<br> timestamp: Date.now(),<br> metadata: {<br> buttonText: "Subscribe Now"<br> }<br>});<br> |
| reportUserScroll(metadata) | Mandatory:- metadata.scrollDepth (number): Scroll depth in pixels- metadata.scrollPercentage (number): Scroll percentage (0-100)- metadata.pageUrl (string): Page URL- metadata.timestamp (number): Event timestampOptional:- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportUserScroll({<br> scrollDepth: 800,<br> scrollPercentage: 75,<br> pageUrl: "https://example.com/article",<br> timestamp: Date.now(),<br> metadata: {<br> scrollDirection: "down"<br> }<br>});<br> |
| reportSubscriberInfo(data) | Mandatory:- data.subscriberId (string): Unique subscriber ID- data.planType (string): Subscription plan type- data.segment (string): User segment- data.profileId (string): Profile IDOptional:- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportSubscriberInfo({<br> subscriberId: "sub_123",<br> planType: "premium",<br> segment: "power_user",<br> profileId: "profile_456",<br> metadata: {<br> subscriptionDate: "2024-01-15"<br> }<br>});<br> |
| reportReferralInfo(data) | Mandatory:- data.referralId (string): Unique referral ID- data.source (string): Referral source- data.medium (string): Referral medium- data.campaign (string): Referral campaignOptional:- data.term (string): Search term- data.content (string): Content identifier- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportReferralInfo({<br> referralId: "ref_789",<br> source: "google",<br> medium: "cpc",<br> campaign: "summer_sale",<br> term: "video streaming",<br> content: "banner_ad_001",<br> metadata: {<br> landingPage: "/welcome"<br> }<br>});<br> |
| reportSubscriptionStart(data) | Mandatory:- data.subscriptionId (string): Subscription identifier- data.planId (string): Plan identifier- data.planName (string): Plan name- data.amount (number): Subscription amount- data.currency (string): Currency code- data.duration (number): Duration value- data.measure (string): Duration measure- data.status (string): Subscription statusOptional:- data.metadata (object): Additional metadata- data.paymentMethod (string): Payment method- data.autoRenew (boolean): Auto-renewal status- data.trialPeriod (number): Trial period in days- data.startDate (string): Start date | javascript<br>mmAnalytics.reportSubscriptionStart({<br> subscriptionId: "sub_123",<br> planId: "premium_monthly",<br> planName: "Premium Monthly",<br> amount: 9.99,<br> currency: "USD",<br> duration: 1,<br> measure: "month",<br> status: "active",<br> paymentMethod: "credit_card",<br> autoRenew: true,<br> trialPeriod: 7,<br> startDate: "2024-01-15",<br> metadata: {<br> source: "pricing_page"<br> }<br>});<br> |
| reportSubscriptionRenewal(data) | Mandatory: Same as reportSubscriptionStart | javascript<br>mmAnalytics.reportSubscriptionRenewal({<br> subscriptionId: "sub_123",<br> planId: "premium_monthly",<br> planName: "Premium Monthly",<br> amount: 9.99,<br> currency: "USD",<br> duration: 1,<br> measure: "month",<br> status: "renewed",<br> metadata: {<br> renewalNumber: 3<br> }<br>});<br> |
| reportSubscriptionCancellation(data) | Mandatory: Same as reportSubscriptionStart | javascript<br>mmAnalytics.reportSubscriptionCancellation({<br> subscriptionId: "sub_123",<br> planId: "premium_monthly",<br> planName: "Premium Monthly",<br> amount: 9.99,<br> currency: "USD",<br> duration: 1,<br> measure: "month",<br> status: "cancelled",<br> metadata: {<br> reason: "too_expensive"<br> }<br>});<br> |
| reportSubscriptionUpgrade(data) | Mandatory: Same as reportSubscriptionStart | javascript<br>mmAnalytics.reportSubscriptionUpgrade({<br> subscriptionId: "sub_123",<br> planId: "premium_yearly",<br> planName: "Premium Yearly",<br> amount: 99.99,<br> currency: "USD",<br> duration: 12,<br> measure: "month",<br> status: "upgraded",<br> metadata: {<br> previousPlan: "premium_monthly"<br> }<br>});<br> |
| reportSubscriptionDowngrade(data) | Mandatory: Same as reportSubscriptionStart | javascript<br>mmAnalytics.reportSubscriptionDowngrade({<br> subscriptionId: "sub_123",<br> planId: "basic_monthly",<br> planName: "Basic Monthly",<br> amount: 4.99,<br> currency: "USD",<br> duration: 1,<br> measure: "month",<br> status: "downgraded",<br> metadata: {<br> previousPlan: "premium_monthly"<br> }<br>});<br> |
| reportSubscriptionViewed(data) | Mandatory:- data.planId (string): Plan identifierOptional:- data.planName (string): Plan name- data.price (number): Plan price- data.duration (string): Plan duration- Additional metadata (key-value pairs) | javascript<br>mmAnalytics.reportSubscriptionViewed({<br> planId: "premium_monthly",<br> planName: "Premium Monthly",<br> price: 9.99,<br> duration: "1 month",<br> metadata: {<br> page: "pricing"<br> }<br>});<br> |
| reportPaymentInitiation(data) | Mandatory:- data.paymentId (string): Payment identifier- data.amount (number): Payment amount- data.currency (string): Currency code- data.paymentMethod (string): Payment methodOptional:- data.metadata (object): Additional metadata- data.transactionId (string): Transaction identifier- data.orderId (string): Order identifier- data.customerId (string): Customer identifier | javascript<br>mmAnalytics.reportPaymentInitiation({<br> paymentId: "pay_123",<br> amount: 9.99,<br> currency: "USD",<br> paymentMethod: "credit_card",<br> transactionId: "txn_456",<br> orderId: "order_789",<br> customerId: "cust_123",<br> metadata: {<br> source: "subscription_payment"<br> }<br>});<br> |
| reportPaymentSuccess(data) | Mandatory: Same as reportPaymentInitiation | javascript<br>mmAnalytics.reportPaymentSuccess({<br> paymentId: "pay_123",<br> amount: 9.99,<br> currency: "USD",<br> paymentMethod: "credit_card",<br> transactionId: "txn_456",<br> metadata: {<br> processingTime: 1500<br> }<br>});<br> |
| reportPaymentFailure(data) | Mandatory:- data.paymentId (string): Payment identifier- data.amount (number): Payment amount- data.currency (string): Currency code- data.paymentMethod (string): Payment method- data.errorType (string): Error type- data.message (string): Error messageOptional:- data.metadata (object): Additional metadata | javascript<br>mmAnalytics.reportPaymentFailure({<br> paymentId: "pay_123",<br> amount: 9.99,<br> currency: "USD",<br> paymentMethod: "credit_card",<br> errorType: "insufficient_funds",<br> message: "Insufficient funds in account",<br> metadata: {<br> retryCount: 1<br> }<br>});<br> |
| reportPaymentRefund(data) | Mandatory:- data.paymentId (string): Payment identifier- data.amount (number): Refund amount- data.currency (string): Currency code- data.refundReason (string): Refund reasonOptional:- data.metadata (object): Additional metadata | javascript<br>mmAnalytics.reportPaymentRefund({<br> paymentId: "pay_123",<br> amount: 9.99,<br> currency: "USD",<br> refundReason: "customer_request",<br> metadata: {<br> refundType: "full_refund"<br> }<br>});<br> |
| reportAdImpression(data) | Mandatory:- data.adId (string): Ad identifier- data.adType (string): Ad typeOptional:- data.duration (number): Ad duration in seconds- data.metadata (object): Additional metadata | javascript<br>mmAnalytics.reportAdImpression({<br> adId: "ad_123",<br> adType: "banner",<br> duration: 30,<br> metadata: {<br> position: "top_banner"<br> }<br>});<br> |
| reportAdClick(data) | Mandatory: Same as reportAdImpression | javascript<br>mmAnalytics.reportAdClick({<br> adId: "ad_123",<br> adType: "banner",<br> metadata: {<br> clickPosition: { x: 150, y: 200 }<br> }<br>});<br> |
| reportAdStart(data) | Mandatory: Same as reportAdImpression | javascript<br>mmAnalytics.reportAdStart({<br> adId: "ad_123",<br> adType: "preroll",<br> duration: 15,<br> metadata: {<br> videoId: "video_456"<br> }<br>});<br> |
| reportAdComplete(data) | Mandatory: Same as reportAdImpression | javascript<br>mmAnalytics.reportAdComplete({<br> adId: "ad_123",<br> adType: "preroll",<br> duration: 15,<br> metadata: {<br> completionRate: 100<br> }<br>});<br> |
| reportAdSkip(data) | Mandatory: Same as reportAdImpression | javascript<br>mmAnalytics.reportAdSkip({<br> adId: "ad_123",<br> adType: "preroll",<br> duration: 5,<br> metadata: {<br> skipReason: "user_skip"<br> }<br>});<br> |
| reportAdError(data) | Mandatory:- data.adId (string): Ad identifier- data.adType (string): Ad type- data.errorType (string): Error type- data.message (string): Error messageOptional:- data.duration (number): Ad duration in seconds- data.metadata (object): Additional metadata | javascript<br>mmAnalytics.reportAdError({<br> adId: "ad_123",<br> adType: "preroll",<br> errorType: "load_failed",<br> message: "Ad failed to load",<br> metadata: {<br> errorCode: "AD_LOAD_ERROR"<br> }<br>});<br> |
| reportExperimentExposure(data) | Mandatory:- data.experimentId (string): Experiment identifier- data.experimentName (string): Experiment name- data.variantId (string): Variant identifier- data.variantName (string): Variant name- data.timestamp (number): Event timestampOptional:- data.metadata (object): Additional metadata- data.exposureType (string): Exposure type- data.source (string): Exposure source- data.context (object): Exposure context | javascript<br>mmAnalytics.reportExperimentExposure({<br> experimentId: "exp_123",<br> experimentName: "New UI Layout",<br> variantId: "variant_a",<br> variantName: "Control",<br> timestamp: Date.now(),<br> exposureType: "page_view",<br> source: "homepage",<br> context: {<br> userSegment: "new_users"<br> },<br> metadata: {<br> sessionId: "session_789"<br> }<br>});<br> |
| reportExperimentActivation(data) | Mandatory: Same as reportExperimentExposure | javascript<br>mmAnalytics.reportExperimentActivation({<br> experimentId: "exp_123",<br> experimentName: "New UI Layout",<br> variantId: "variant_a",<br> variantName: "Control",<br> timestamp: Date.now(),<br> exposureType: "feature_activation",<br> source: "user_interaction",<br> metadata: {<br> activationTrigger: "button_click"<br> }<br>});<br> |
| reportFeatureFlagEvaluation(data) | Mandatory:- data.featureId (string): Feature identifier- data.featureName (string): Feature name- data.enabled (boolean): Feature enabled status- data.timestamp (number): Event timestampOptional:- data.metadata (object): Additional metadata- data.evaluationContext (object): Evaluation context- data.source (string): Evaluation source | javascript<br>mmAnalytics.reportFeatureFlagEvaluation({<br> featureId: "feature_123",<br> featureName: "Dark Mode",<br> enabled: true,<br> timestamp: Date.now(),<br> evaluationContext: {<br> userType: "premium"<br> },<br> source: "app_startup",<br> metadata: {<br> evaluationTime: 50<br> }<br>});<br> |
| reportExperimentResults(data) | Mandatory:- data.experimentId (string): Experiment identifier- data.experimentName (string): Experiment name- data.variantId (string): Variant identifier- data.variantName (string): Variant name- data.results (object): Experiment results- data.timestamp (number): Event timestampOptional:- data.metadata (object): Additional metadata- data.resultType (string): Result type- data.metrics (object): Metrics data- data.context (object): Result context | javascript<br>mmAnalytics.reportExperimentResults({<br> experimentId: "exp_123",<br> experimentName: "New UI Layout",<br> variantId: "variant_a",<br> variantName: "Control",<br> results: {<br> conversionRate: 0.15,<br> engagementTime: 300<br> },<br> timestamp: Date.now(),<br> resultType: "conversion",<br> metrics: {<br> clicks: 45,<br> impressions: 300<br> },<br> context: {<br> userSegment: "new_users"<br> },<br> metadata: {<br> sessionDuration: 1800<br> }<br>});<br> |
| reportEvent(event) | Mandatory:- event (object): Event data objectOptional:- Additional event data (key-value pairs) | javascript<br>mmAnalytics.reportEvent({<br> eventName: "custom_action",<br> eventType: "user_interaction",<br> timestamp: Date.now(),<br> userId: "user_123",<br> metadata: {<br> action: "button_click",<br> page: "dashboard"<br> }<br>});<br> |
| reportFeatureUsage(data) | Mandatory:- data.featureId (string): Feature identifier- data.featureName (string): Feature name- data.action (string): Feature action- data.timestamp (number): Event timestampOptional:- data.metadata (object): Additional metadata | javascript<br>mmAnalytics.reportFeatureUsage({<br> featureId: "feature_123",<br> featureName: "Search Function",<br> action: "search_executed",<br> timestamp: Date.now(),<br> metadata: {<br> searchTerm: "video streaming",<br> resultsCount: 15<br> }<br>});<br> |
- Modern Browsers: Chrome 50+, Firefox 50+, Safari 10+, Edge 14+
- Legacy Browsers: IE 11+ (using ES5 build)
- Mobile Browsers: iOS Safari 10+, Android Chrome 50+
Node.js Support
- Node.js 14.0.0+
License
MIT License
Support
For support and questions:
- Documentation: GitHub Repository
- Issues: GitHub Issues
- Contact: MediaMelon Support
Changelog
v1.0.0
- Initial release
- Core analytics functionality
- Video tracking
- User tracking
- Monetization tracking
- Experiment tracking
- Auto-collection
- Tree shaking support
