RewardedAd.getAnalytics()

Get real-time analytics and performance metrics for the current session.

Syntax

JavaScript
RewardedAd.getAnalytics()

Description

The getAnalytics() method returns real-time performance metrics for the current user session. This is useful for tracking ad performance, debugging issues, and displaying stats to developers or QA testers.

â„šī¸ Session Analytics: Analytics are tracked client-side and reset when the page reloads. These are different from the server-side analytics shown in your Publisher Dashboard.

Parameters

None

Return Value

Type: object

Returns an object with the following properties:

TypeScript
{
    impressions: number,         // Total ads shown this session
    completions: number,         // Ads watched to completion
    clicks: number,              // CTA button clicks
    errors: number,              // Total errors encountered
    viewableImpressions: number, // Ads that met viewability criteria
    sessionStart: number,        // Session start timestamp
    lastAdTimestamp: number      // When last ad was shown
}

Metrics Explained

Metric Description When It Increases
impressions Total ads shown When ad starts playing
completions Ads watched to end When ad completes (reward earned)
clicks CTA button clicks When user clicks ad CTA
errors Total errors When any error occurs
viewableImpressions Ads 50%+ visible for 2s+ When viewability threshold met
sessionStart Session start time Set once during init()
lastAdTimestamp Last ad shown time Updated on each ad impression

Examples

Basic Usage

JavaScript
const analytics = RewardedAd.getAnalytics();
console.log('Session Analytics:', analytics);
console.log('Impressions:', analytics.impressions);
console.log('Completions:', analytics.completions);
console.log('Click-through rate:', 
    (analytics.clicks / analytics.impressions * 100).toFixed(2) + '%');

Display Stats Dashboard

JavaScript
function displayAnalyticsDashboard() {
    const analytics = RewardedAd.getAnalytics();
    
    const dashboard = `
        📊 Session Analytics
        ═══════════════════
        Impressions: ${analytics.impressions}
        Completions: ${analytics.completions}
        Clicks: ${analytics.clicks}
        Errors: ${analytics.errors}
        Viewable: ${analytics.viewableImpressions}
        
        📈 Completion Rate: ${
            analytics.impressions > 0 
                ? (analytics.completions / analytics.impressions * 100).toFixed(1) 
                : 0
        }%
        
        📈 Click Rate: ${
            analytics.impressions > 0 
                ? (analytics.clicks / analytics.impressions * 100).toFixed(1) 
                : 0
        }%
        
        📈 Viewability Rate: ${
            analytics.impressions > 0 
                ? (analytics.viewableImpressions / analytics.impressions * 100).toFixed(1) 
                : 0
        }%
    `;
    
    console.log(dashboard);
}

displayAnalyticsDashboard();

Real-Time Stats Widget

JavaScript
function updateStatsWidget() {
    const analytics = RewardedAd.getAnalytics();
    
    document.getElementById('stat-impressions').textContent = analytics.impressions;
    document.getElementById('stat-completions').textContent = analytics.completions;
    document.getElementById('stat-clicks').textContent = analytics.clicks;
    document.getElementById('stat-errors').textContent = analytics.errors;
    
    // Calculate completion rate
    const completionRate = analytics.impressions > 0 
        ? (analytics.completions / analytics.impressions * 100).toFixed(1) 
        : 0;
    document.getElementById('stat-completion-rate').textContent = completionRate + '%';
}

// Update every 2 seconds
setInterval(updateStatsWidget, 2000);
updateStatsWidget();

Performance Monitor

JavaScript
function monitorPerformance() {
    const analytics = RewardedAd.getAnalytics();
    const info = RewardedAd.getInfo();
    
    console.group('🔍 Performance Monitor');
    console.log('SDK Version:', info.version);
    console.log('Session Duration:', 
        Math.floor((Date.now() - analytics.sessionStart) / 1000) + 's');
    
    // Check for issues
    if (analytics.errors > 0) {
        console.warn('âš ī¸ Errors detected:', analytics.errors);
    }
    
    if (analytics.impressions > 0 && analytics.completions === 0) {
        console.warn('âš ī¸ No completions yet - users skipping ads?');
    }
    
    if (analytics.clicks === 0 && analytics.impressions > 5) {
        console.log('â„šī¸ No clicks yet - low engagement');
    }
    
    const viewabilityRate = analytics.impressions > 0 
        ? (analytics.viewableImpressions / analytics.impressions * 100) 
        : 0;
    
    if (viewabilityRate < 80) {
        console.warn('âš ī¸ Low viewability rate:', viewabilityRate.toFixed(1) + '%');
    } else {
        console.log('✅ Good viewability:', viewabilityRate.toFixed(1) + '%');
    }
    
    console.groupEnd();
}

// Run every 30 seconds
setInterval(monitorPerformance, 30000);

Debug Panel Integration

JavaScript
class AdDebugPanel {
    constructor() {
        this.createPanel();
        this.startUpdating();
    }
    
    createPanel() {
        const panel = document.createElement('div');
        panel.id = 'ad-debug-panel';
        panel.style.cssText = `
            position: fixed;
            top: 10px;
            right: 10px;
            background: rgba(0,0,0,0.9);
            color: #0f0;
            padding: 15px;
            border-radius: 8px;
            font-family: monospace;
            font-size: 12px;
            z-index: 99999;
        `;
        document.body.appendChild(panel);
    }
    
    update() {
        const analytics = RewardedAd.getAnalytics();
        const available = RewardedAd.isAdAvailable();
        const cooldown = RewardedAd.getCooldownRemaining();
        const preloaded = RewardedAd.getPreloadedAdCount();
        
        const panel = document.getElementById('ad-debug-panel');
        panel.innerHTML = `
            
đŸŽŦ Impressions: ${analytics.impressions}
✅ Completions: ${analytics.completions}
đŸ–ąī¸ Clicks: ${analytics.clicks}
❌ Errors: ${analytics.errors}
đŸ‘ī¸ Viewable: ${analytics.viewableImpressions}

đŸ“Ļ Preloaded: ${preloaded}
đŸŸĸ Available: ${available ? 'YES' : 'NO'}
âąī¸ Cooldown: ${cooldown}s
`; } startUpdating() { setInterval(() => this.update(), 1000); this.update(); } } // Enable for development if (window.location.hostname === 'localhost') { new AdDebugPanel(); }

React Hook for Analytics

JavaScript
import { useState, useEffect } from 'react';

function useAdAnalytics() {
    const [analytics, setAnalytics] = useState({
        impressions: 0,
        completions: 0,
        clicks: 0,
        errors: 0,
        viewableImpressions: 0
    });
    
    useEffect(() => {
        const interval = setInterval(() => {
            if (RewardedAd.isReady()) {
                const stats = RewardedAd.getAnalytics();
                setAnalytics(stats);
            }
        }, 2000);
        
        return () => clearInterval(interval);
    }, []);
    
    // Calculate derived metrics
    const completionRate = analytics.impressions > 0 
        ? (analytics.completions / analytics.impressions * 100).toFixed(1) 
        : 0;
    
    const clickRate = analytics.impressions > 0 
        ? (analytics.clicks / analytics.impressions * 100).toFixed(1) 
        : 0;
    
    return {
        ...analytics,
        completionRate,
        clickRate
    };
}

// Usage in component
function AnalyticsDashboard() {
    const stats = useAdAnalytics();
    
    return (
        

Session Analytics

Impressions: {stats.impressions}
Completions: {stats.completions}
Completion Rate: {stats.completionRate}%
Click Rate: {stats.clickRate}%
); }

Export Analytics Data

JavaScript
function exportAnalytics() {
    const analytics = RewardedAd.getAnalytics();
    const info = RewardedAd.getInfo();
    
    const report = {
        timestamp: new Date().toISOString(),
        sdk: {
            version: info.version,
            apiVersion: info.apiVersion
        },
        session: {
            duration: Date.now() - analytics.sessionStart,
            startTime: new Date(analytics.sessionStart).toISOString()
        },
        metrics: {
            impressions: analytics.impressions,
            completions: analytics.completions,
            clicks: analytics.clicks,
            errors: analytics.errors,
            viewableImpressions: analytics.viewableImpressions
        },
        rates: {
            completionRate: analytics.impressions > 0 
                ? (analytics.completions / analytics.impressions * 100).toFixed(2) 
                : 0,
            clickThroughRate: analytics.impressions > 0 
                ? (analytics.clicks / analytics.impressions * 100).toFixed(2) 
                : 0,
            viewabilityRate: analytics.impressions > 0 
                ? (analytics.viewableImpressions / analytics.impressions * 100).toFixed(2) 
                : 0
        },
        config: info.config
    };
    
    // Download as JSON
    const blob = new Blob([JSON.stringify(report, null, 2)], 
        { type: 'application/json' });
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = `bzze-analytics-${Date.now()}.json`;
    a.click();
    
    console.log('Analytics exported:', report);
    return report;
}

// Usage: Call when needed
exportAnalytics();

Common Use Cases

1. Development & Testing

  • Monitor ad performance during development
  • Verify integration is working correctly
  • Track error rates during testing

2. QA & Debug Dashboard

  • Display real-time stats for QA testers
  • Identify issues with ad delivery
  • Monitor viewability metrics

3. A/B Testing

  • Compare ad performance across variants
  • Track completion rates for different placements
  • Measure user engagement

4. Performance Monitoring

  • Track session-level performance
  • Identify low engagement patterns
  • Monitor error frequency

Key Differences

Client-Side vs Server-Side Analytics

Feature getAnalytics() (Client) Publisher Dashboard (Server)
Scope Current session only All users, all time
Data Reset On page reload Never (persistent)
Use Case Development, debugging Business analytics, reporting
Access JavaScript API Web dashboard
Accuracy Client-side (can be bypassed) Server-side (authoritative)

Best Practices

✅ DO:
  • Use for development and debugging
  • Display to QA testers and developers
  • Monitor performance during testing
  • Export data for bug reports
  • Create debug dashboards with this data
  • Track session-level metrics
âš ī¸ DON'T:
  • Use for production business analytics
  • Display to end users (keep for internal use)
  • Rely on it for billing or revenue tracking
  • Use as replacement for server-side analytics
  • Assume data persists across page reloads

Related Methods

See Also