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
- getInfo() - Get SDK configuration
- enableDebug() - Enable debug logging
- Callbacks - Track events in real-time