Brand Store - Mobile Integration Playground
Step-by-step guide for mobile app developers. Execute each step to see the network requests in action.
No JS SDK required - all calls are direct HTTP requests that you can implement in Swift/Kotlin.
Note: This example shows the Brand Store format (single ad button).
For other formats, the integration flow is similar. However, formats that display multiple products
(e.g., Branded Products) require additional work - you'll need to attach click tracking URLs
to each displayed product individually. The general flow (fetch → parse → track impression → track clicks)
remains the same.
Configuration
1
Fetch Ad from Bidder
Pending
Request Body (OpenRTB)
Loading...
Click "Execute" to fetch ad from bidder
2
Parse Response
Waiting
Parse bid.adm
// Extract bid from response
const bid = response.seatbid[0].bid[0];
// Parse adm (it's a JSON string)
const adm = JSON.parse(bid.adm);
// Extract tracking data
const gctx = adm.gctx; // Global context
const lctx = adm.lctx; // Local context
const adclick = adm.meta.adclick; // Click tracking base URL
const click = adm.fields.click; // Click parameter
// Construct click URL
const clickUrl = adclick + encodeURIComponent(click);
// DSA info (optional)
const dsa = bid.ext?.dsa;
Waiting for Step 1...
Live Preview
This is what the ad button would look like. Shop provides all display data.
Render Ad fires two events:
/ems- Impression event (ad loaded)/av- Active View event (viewability confirmed)
⚠️ Active View (/av): Your app must implement viewability measurement!
MRC/IAB Standard: Fire
Use platform APIs: iOS (UIView visibility), Android (View.getGlobalVisibleRect) + timer.
MRC/IAB Standard: Fire
/av only when ≥50% of ad pixels are visible for ≥1 continuous second.
Use platform APIs: iOS (UIView visibility), Android (View.getGlobalVisibleRect) + timer.
Complete Steps 1-2 first
Click "Render Ad" to display the ad and fire impression
3
Fire Impression Event
Waiting Debug
Track Impression (when ad becomes visible)
// Build event data
const eventData = {
gctx: gctx,
ems: [{
lctx: lctx,
is_measurable: true
}]
};
// Encode and send
const encoded = encodeURIComponent(JSON.stringify(eventData));
const url = `https://das.idealo.com/${networkId}/v1/events-processor/ems?eventData=${encoded}`;
// Fire impression tracking (GET request)
fetch(url, { credentials: 'include' });
Auto-fired when you click "Render Ad" above, or execute manually here.
4
Fire Click Tracking
Waiting Debug
Track Click (when user taps the ad)
// Construct click tracking URL
const clickUrl = adclick + encodeURIComponent(click);
// Fire click pixel (non-blocking)
new Image().src = clickUrl;
// Then open the shop URL
// In mobile app: open shopData.productUrl in browser/webview
window.open(shopProductUrl, '_blank');
Auto-fired when you click the ad preview above, or execute manually here.
Network Log
Network requests will appear here...