Use this article to integrate the Vungle SDK for these Windows platforms:
- Win32 (Native Desktop, C++)
- WinUI 3
Requirements
- Vungle SDK v.7.0.0 for Win32 and WinUI 3 both support Windows v.10 and v.11.
-
Microsoft WebView2 Runtime: Vungle SDK uses the new Microsoft Edge WebView2 browser control to display our ads. WebView2 depends on the Microsoft Edge WebView2 Runtime to function at runtime; without it, your library will fail to create or display the webview even if everything is linked correctly. The installer for your application must install the WebView2 Runtime. Of the three options discussed below, we recommend the Evergreen Bootstrapper. You can learn more about these options in the Microsoft Edge Developer documentation.
- Evergreen Bootstrapper (Recommended): The Evergreen Bootstrapper is a small installer (~2 MB) that downloads and installs the latest WebView2 runtime during setup. We recommend this option because it auto-updates, is lightweight, and is easy to integrate into existing MSI/EXE installers.
- Evergreen Standalone Installer: The full installer (~120 MB) is suitable for offline environments because it doesn’t require internet.
- Fixed Version Distribution: Fixed Version distribution bundles a known-good version of WebView2 inside the installer or app folder and gives you full control over runtime version and updates. However, it does have a larger footprint and requires more maintenance.
Step 1. Add the Vungle SDK Into Your Project
- Use NuGet package manager inside Visual Studio to install the Vungle SDK.
- Win32 (Native Desktop, C++):
- WinUI 3:
- Win32 (Native Desktop, C++):
-
For C++, add the following includes to your
.cppfile.
Note: These C++ includes do not apply to WinUI 3 or UWP, both of which use C# code.
#include <LiftoffAds.h> #include <EventArguments\AdLoadCallback.h> #include <EventArguments\InitializationCallback.h> #include <EventArguments\AdLoadEventArgs.h> #include <EventArguments\AdPlayCallback.h>
Step 2. Initialize the SDK
void OnLiftoffInitializationSuccess(const InitializationSuccessEventArgs& args) {
std::cout << "Initialization succeeded!" << std::endl;
}
void OnLiftoffInitializationFailure(const InitializationFailureEventArgs& args) {
std::cout << "Initialization Failed!" << std::endl;
}
LiftoffSdkConfig config;
InitializationCallback initCallback;
std::string appIDStr = "<your app id from Vungle Dashboard>";
initCallback.OnInitializationFailure = OnLiftoffInitializationFailure;
initCallback.OnInitializationSuccess = OnLiftoffInitializationSuccess;
auto futureInstance2 = LiftoffAds::InitializeAsync(appIDStr, config, hWnd, initCallback);
g_sdkInstance = futureInstance2.get();
// Create callbacks for initialization success or failure
void OnLiftoffInitializationSuccess(const InitializationSuccessEventArgs& args) {
try
{
std::cout <><"initialization><><><"error during="during" couldn="couldn" t="t" get="get"><><><><><"initialization><> <><> <> <> <><> <><>
// Use this to get debugging information
LiftoffAds.AddDiagnosticListener(LiftoffAds_OnDiagnostic);
// Get a callback to know whether you were able to initialize the SDK
// or not.
LiftoffAds.OnInitializationSuccess += LiftoffAds_OnInitializationSuccess;
LiftoffAds.OnInitializationFailure += LiftoffAds_OnInitializationFailure;
// Get a callback to know whether the ad was loaded or not.
LiftoffAds.OnAdPlayableChanged += LiftoffAds_OnAdPlayableChanged;
// Get a callback when an ad starts.
LiftoffAds.OnAdStart += LiftoffAds_OnAdStart;
// Get a callback after an ad has shown.
LiftoffAds.OnAdEnd += LiftoffAds_OnAdEnd;
// You can customize initialization by setting values in sdkConfig.
LiftoffSdkConfig sdkConfig = new LiftoffSdkConfig();
// Now, initialize the SDK.
m_sdk = await LiftoffAds.InitializeAsync(appID, sdkConfig, this);
private void LiftoffAds_OnInitFailed(object? sender, InitializationFailureEventArgs e)
{
// Initialization of the SDK failed
}
private void LiftoffAds_OnInitCompleted(object? sender, InitializationSuccessEventArgs e)
{
foreach (var placement in e.Placements)
{
// Save placements' names in a list
}
}
private void LiftoffAds_OnDiagnostic(object sender, DiagnosticLogEvent e)
{
System.Diagnostics.Debug.WriteLine(e.ToString());
}
private void LiftoffAds_OnAdPlayableChanged(object? sender, AdPlayableEventArgs e)
{
// Check e.AdPlayable to see if the ad loaded succesfully or not
}
private void LiftoffAds_OnAdStart(object sender, AdStartEventArgs e)
{
System.Diagnostics.Debug.WriteLine("Ad has started playing...");
}
private void LiftoffAds_OnAdEnd(object sender, AdEndEventArgs e)
{
System.Diagnostics.Debug.WriteLine("Ad has finished playing...");
}
Step 3. Add Code to Load and Play an Ad
Load an Ad
/// <summary>
/// This callback gets called when an ad successfully loads.
/// </summary>
void OnAdLoadSuccess(AdLoadEventArgs args) {
std::cout << "Ad Load Success! " << "Bundle Count: " << args.BundleCount << std::endl;
}
/// <summary>
/// This callback gets called when an ad fails to load.
/// </summary>
void OnAdLoadFailure(AdLoadEventArgs args) {
std::cout << "Ad Load Failure! " << args.ErrorMessage << std::endl;
}
AdLoadCallback callback;
callback.OnAdLoadFailure = OnAdLoadFailure;
callback.OnAdLoadSuccess = OnAdLoadSuccess;
// Load the ad using the selected placement name
g_sdkInstance->LoadAd(
"<your placement name from Vungle Dashboard>",
callback);
m_sdk.LoadAd(placement);
Play an Ad
/// <summary>
/// Handles the start of an advertisement by logging its placement and event ID.
/// </summary>
/// <param name="args">An AdPlayEventArgs object containing information about the ad placement and event ID.</param>
void OnAdStart(AdPlayEventArgs args) {
std::cout << "Ad started for placement: " << args.Placement << " with event id: " << args.EventID << std::endl;
}
/// <summary>
/// Handles the event triggered when an advertisement finishes playing.
/// </summary>
/// <param name="args">The event arguments containing information about the ad playback,
/// including the placement name.
/// </param>
void OnAdEnd(AdPlayEventArgs args) {
std::cout << "Ad ended for placement: " << args.Placement << std::endl;
}
/// <summary>
/// Handles the event when an advertisement fails to play.
/// </summary>
/// <param name="args">The event arguments containing information about the ad play failure, including the placement identifier.</param>
void OnAdPlayFailure(AdPlayEventArgs args) {
std::cout << "Ad Play Failure for placement: " << args.Placement << std::endl;
}
/// <summary>
/// Handles the event when a rewarded advertisement has been successfully played.
/// A "rewarded ad" is one where the user should receive some in-app reward for watching most or all of the ad.
/// </summary>
/// <param name="args"></param>
void OnAdPlayRewarded(AdPlayEventArgs args) {
std::cout << "Ad Play Rewarded for placement: " << args.Placement << std::endl;
}
/// <summary>
/// Handles the event when an advertisement is clicked by the user.
/// </summary>
/// <param name="args"></param>
void OnAdPlayClick(AdPlayEventArgs args) {
std::cout << "Ad Play Clicked for placement: " << args.Placement << std::endl;
}
AdPlayCallback playCallback;
playCallback.OnAdStart = OnAdStart;
playCallback.OnAdEnd = OnAdEnd;
playCallback.OnAdPlayFailure = OnAdPlayFailure;
playCallback.OnAdPlayRewarded = OnAdPlayRewarded;
playCallback.OnAdPlayClick = OnAdPlayClick;
AdConfig config = AdConfig();
g_sdkInstance->PlayAd(
"<your placement id from Vungle Dashboard>",
playCallback,
config);
// Optionally, you can override AdConfig settings
AdConfig adConfig = new AdConfig();
// TODO: Use newer, alternate "instance based" api
var playInfo = await m_sdk.PlayAdAsync(adConfig, placement);
if (playInfo.Success == false)
{
// log an error
}
else
{
// Success!
}
Step 4. Configure Advanced Settings
Follow these advanced settings to fine-tune your app's integration with additional configuration options, such as GDPR, CCPA implementation, and many other settings.
GDPR
As of May 25, 2019, the General Data Protection Regulation (GDPR) is enforced in the European Union. To comply with GDPR, developers have the following options.
- Option 1 (recommended): Allow Vungle to handle the requirements. Vungle will display a consent dialog before playing an ad for a European user, and will remember the user’s consent or rejection for subsequent ads.
- Option 2: Publisher controls the GDPR consent process at the user level, then communicates the user’s choice to Vungle. To do this, developers can collect the user’s consent using their own mechanism, and then use Vungle APIs to update or query the user’s consent status. Refer to the sample code below for details.
The SetGdprConsentStatus method (recommended in
Option 2) takes the user's consent status and
the consent message
version as its parameters.
Use the following example to add similar code for setting GDPR status:
// use the following line of code if you want to opt in to GDPR
// this will result in higher revenue
GdprConsentStatus status = GdprConsentStatus::ConsentAccepted;
// Use the following line of code if you want to opt out of GDPR
// This will result in lower revenue, but you must do it if GDPR laws are relevent
// to your user.
status = GdprConsentStatus::ConsentDenied; break; // Opted Out
std::string versionStr = "1.0" // you can update this with your own version
LiftoffAds::SetGdprConsentStatus(status, versionStr);
// As you make changes to your GDPR setup, you may want to change the version
String consentMessageVersion1 = "1.0";
// Use the following if you want to "opt in" to GDPR
m_sdk.SetGdprConsentStatus(LiftoffSDK.Public.GdprConsentStatus.ConsentAccepted, consentMessageVersion);
// Use the following line of code if you want to opt out of GDPR
// This will result in lower revenue, but you must do it if GDPR laws are relevent
// to your user.
m_sdk.SetGdprConsentStatus(LiftoffSDK.Public.GdprConsentStatus.ConsentDenied, consentMessageVersion);
Use the following code to get the current GDPR status:
GdprConsentStatus status = LiftoffAds::GetGdprConsentStatus();
LPCWSTR statusText = L"Unknown";
switch (status) {
case GdprConsentStatus::ConsentAccepted:
statusText = L"Opted In";
break;
case GdprConsentStatus::ConsentDenied:
statusText = L"Opted Out";
break;
}
String version = m_context.SdkInstance.GetGdprConsentMessageVersion();
LiftoffSDK.Public.GdprConsentStatus? currentStatus = m_sdk.GetGdprConsentStatus();
COPPA
Generally speaking, the Children’s Online Privacy Protection Act (COPPA) regulates the collection, use, and disclosure of personal information for children under the age of 13 by certain websites and online services (including mobile apps). Compliance with COPPA is a legal issue and we suggest you seek the advice of an attorney in determining compliance. Additionally, for more information on COPPA, please refer to the Federal Trade Commission's COPPA FAQ.
Liftoff has tools to assist publishers with COPPA compliance. In addition to use of settings on the Liftoff Monetize Dashboard, Liftoff offers features within the Vungle SDK using the COPPA API.
COPPA Compliance at the App Level
Liftoff provides tooling in the Monetize Dashboard to indicate COPPA compliance for each app. When defining your app in the Liftoff Monetize Dashboard, you must indicate to Liftoff whether your app is directed toward children under age 13. Depending on your setting, Liftoff will globally treat all traffic for the app as subject to COPPA or not. If you indicate that your app is not directed toward children under 13, COPPA settings will not apply at the app level, and can then be indicated at a more granular level (see COPPA Compliance at the Device Level).
COPPA Compliance at the Device Level
Starting with SDK v.6.11 early access, Vungle provides an optional method for you to indicate at the device level whether the user within the given mobile app is under or over the age of 13 by using the SDK COPPA API. The SDK COPPA API is most appropriate in cases of apps that legally can implement an age screen or age gate in accordance with COPPA, rather than treating all users as under 13. If you believe your app as a whole is primarily directed to children under the age of 13 as set forth in COPPA and related guidance, the COPPA Dashboard settings are more appropriate for you.
Recommendations for Using Vungle's COPPA Compliance Tools
- Pursuant to the Vungle SDK License and Publisher Terms, it is the publisher’s responsibility to ensure compliance with applicable laws, including COPPA. Vungle is not liable for COPPA violations resulting from incorrect settings communicated via the SDK COPPA API. Consider the following recommendations to help you ensure COPPA compliance.
-
Use the SDK COPPA API for mixed-audience apps. Use the SDK
COPPA API if:
- You have confirmed you are a “mixed-audience app” under COPPA
- You have implemented an age gate or age screen
- You have stated that for your app “COPPA settings will NOT apply” in the Publisher Dashboard (otherwise, a COPPA-compliant setting in your Dashboard will override any API settings to the contrary)
- Use the Dashboard for apps directed towards children under 13: In cases where it is clear that your app is primarily directed to children under the age of 13, use the COPPA settings section in the Publisher Dashboard instead of the SDK COPPA API.
- Conflicting settings between API and Dashboard: As noted above, you can establish COPPA settings at the app level (but not at the user level) on the Publisher Dashboard, and at the device/user level by using the SDK COPPA API. Under the current release of SDK COPPA API functionality, in the event of a conflict between the settings in Publisher Dashboard and those passed via the SDK COPPA API, the COPPA-compliant setting takes precedence.
For example, if your app setting on the Publisher Dashboard is COPPA-compliant, and that same app also enables use of the SDK COPPA API and identifies a given user as over 13, Vungle will defer to the Dashboard setting, which states that all the users in this app are protected by COPPA regulations. If, on the other hand, your app setting on the Publisher Dashboard states that your app is not directed toward users under the age of 13, but a call to the SDK COPPA API identifies a given user as under age 13, Vungle will override the dashboard setting and treat that user as being protected by COPPA regulations.
COPPA API
Use the following example to add similar code for setting COPPA status:
BOOL coppaStatus = TRUE; // opted in to privacy; set to FALSE to opt out
LiftoffAds::SetCoppaStatus(coppaStatus);
// opted in to privacy; set to FALSE to opt out
// Note that opting in will result in a drop of revenue
m_sdk.SetCoppaStatus(true);
Use the following example to add similar code to determine the current COPPA status. Note that the status defaults to ‘false’ if you don’t set it.
BOOL coppaStatus = LiftoffAds::GetCoppaStatus();
bool? status = m_sdk.GetCoppaStatus();
CCPA
As of July 1, 2020, California Consumer Privacy Act (CCPA) is enforced.
The AdFactory.UpdateCcpaStatus() method takes the
user's consent
status to specify whether the user has OptedIn or
OptedOut and AdFactory.GetCcpaStatus()
method returns
current CCPA status for the user.
In accordance with CCPA, the consent status is opted in by default
unless
UpdateCcpaStatus() has been explicitly called to
set it as opted
out.
Use the following code to set the CCPA status:
// use this line if you want to give the user more privacy
CcpaConsentStatus status = CcpaConsentStatus::OptedIn
// or, use this line if you want to opt the user out of privacy
CcpaConsentStatus status = CcpaConsentStatus::OptedOut;
LiftoffAds::SetCcpaStatus(status);
// privacy is off
m_sdk.SetCcpaStatus(CcpaConsentStatus.OptedIn);
// privacy is on (revenue will drop)
m_sdk.SetCcpaStatus(CcpaConsentStatus.OptedOut);
Use the following code to get CCPA status:
CcpaConsentStatus status = LiftoffAds::GetCcpaStatus();
LPCWSTR statusText = L"Unknown";
switch (status) {
case CcpaConsentStatus::OptedIn: // privacy is on
statusText = L"Opted In";
break;
case CcpaConsentStatus::OptedOut: // privacy is off
statusText = L"Opted Out";
break;
}
CcpaConsentStatus status = s_instance.GetCcpaStatus();
Expert-Level Setting: Enable Mediation
Enable mediation to monetize your Windows app through in-app bidding with Vungle SDK. In addition to the client-side code below, your server team must work with our server team to set up communication between our mediation servers. Contact us for more information.
-
Call the SDK’s
GetMediationSuperTokenmethod to get a SuperToken from the SDK.std::string placementID = "<placement name>"; std::string superToken = m_sdk->GetMediationSuperToken(placementID); if (superToken.empty()) { MessageBox(hWnd, L"Failed to get super token from SDK.", L"Get Super Token", MB_OK | MB_ICONERROR); return; }String placement = "my placement"; // get this from Vungle Dashboard String superToken = m_sdk.GetMediationSuperToken(placement); - Send this SuperToken to your server; your server will then send this SuperToken to the Vungle server.
-
The Vungle server then decides whether to bid on this opportunity, and if yes, how much to bid.
- If Vungle does decide to bid, it will return a non-blank token; otherwise, it will return an empty string.
-
If the Vungle server decides to bid on this opportunity,
it will
return
Ad Markup.
You will later need a section of this ad markup to
send as a
parameter
to
LoadMediatedAdandPlayMediatedAd.
{ "id": "123456", "seatbid": [{ "bid": [{ "id": "68e6cdfc496a5c6f19f3df9a", "impid": "234567", "price": 50.001, "nurl": "https://events.ads.vungle.com/api/win?settlement_price=${AUCTION_PRICE}\u0026ext=eyJpZCI6IjY4ZTZjZGZjNDk2YTVjNmYxOWYzZGY5YSIsImltcF9pZCI6IjEiLCJuYW1lIjoibWF4IiwicHJpY2UiOjUwLjAwMSwiYmZsYXRfcHJpY2UiOjUwLjAwMSwicHJfbWwiOjEsImJpZCI6IjY4ZTZjZGZjNDk2YTVjNmYxOWYzZGY5YSIsImludGVybmFsIjp0cnVlLCJvcmRpbmFsIjoxLCJ0Ijp0cnVlLCJzZGtfYnVybCI6dHJ1ZSwibSI6MSwiYXBwaWQiOiI1OTc2NmVkM2NjOWI5OGUzNzEwMDBjYmMiLCJwcmlkIjoiVEVTVF9CSURESU5HX1BMQUNFTUVOVC01MjE3MjkyIiwibiI6dHJ1ZSwidnhfcHJpY2UiOjEwMS4wMDEsInZ4X3NlY29uZF9wcmljZSI6MTAwLjAwMSwiY2NfaXNvMiI6IlVTIiwiaXNfczJzIjpmYWxzZSwic3YiOiI3LjAuMC1xYTE2Iiwib3MiOiJ3aW5kb3dzIiwiZGV2X2lkIjoiNWEwYzFlNTk0MDIzZjBlYTcwNjdmN2IzZTk2Y2EyZmQiLCJkZXZfaWRfc291cmNlIjoiSUZBIiwicnRiX2lkIjoiNjRkYjI5NThiMTNiYjJjODcwYmE5NzI0In0=\u0026second_highest_price=${AUCTION_MINIMUM_BID_TO_WIN}", "burl": "https://events.ads.vungle.com/api/bill?settlement_price=${AUCTION_PRICE}\u0026ext=eyJpZCI6IjY4ZTZjZGZjNDk2YTVjNmYxOWYzZGY5YSIsImltcF9pZCI6IjEiLCJuYW1lIjoibWF4IiwicHJpY2UiOjUwLjAwMSwiYmZsYXRfcHJpY2UiOjUwLjAwMSwicHJfbWwiOjEsImJpZCI6IjY4ZTZjZGZjNDk2YTVjNmYxOWYzZGY5YSIsImludGVybmFsIjp0cnVlLCJvcmRpbmFsIjoxLCJ0Ijp0cnVlLCJzZGtfYnVybCI6dHJ1ZSwibSI6MSwiYXBwaWQiOiI1OTc2NmVkM2NjOWI5OGUzNzEwMDBjYmMiLCJwcmlkIjoiVEVTVF9CSURESU5HX1BMQUNFTUVOVC01MjE3MjkyIiwibiI6dHJ1ZSwidnhfcHJpY2UiOjEwMS4wMDEsInZ4X3NlY29uZF9wcmljZSI6MTAwLjAwMSwiY2NfaXNvMiI6IlVTIiwiaXNfczJzIjpmYWxzZSwic3YiOiI3LjAuMC1xYTE2Iiwib3MiOiJ3aW5kb3dzIiwiZGV2X2lkIjoiNWEwYzFlNTk0MDIzZjBlYTcwNjdmN2IzZTk2Y2EyZmQiLCJkZXZfaWRfc291cmNlIjoiSUZBIiwicnRiX2lkIjoiNjRkYjI5NThiMTNiYjJjODcwYmE5NzI0In0=", "lurl": "https://events.ads.vungle.com/api/loss?settlement_price=${AUCTION_PRICE}\u0026loss_reason=${AUCTION_LOSS}\u0026auction_min_to_win=${AUCTION_MIN_TO_WIN}\u0026ext=eyJpZCI6IjY4ZTZjZGZjNDk2YTVjNmYxOWYzZGY5YSIsImltcF9pZCI6IjEiLCJuYW1lIjoibWF4IiwicHJpY2UiOjUwLjAwMSwiYmZsYXRfcHJpY2UiOjUwLjAwMSwicHJfbWwiOjEsImJpZCI6IjY4ZTZjZGZjNDk2YTVjNmYxOWYzZGY5YSIsImludGVybmFsIjp0cnVlLCJvcmRpbmFsIjoxLCJ0Ijp0cnVlLCJzZGtfYnVybCI6dHJ1ZSwibSI6MSwiYXBwaWQiOiI1OTc2NmVkM2NjOWI5OGUzNzEwMDBjYmMiLCJwcmlkIjoiVEVTVF9CSURESU5HX1BMQUNFTUVOVC01MjE3MjkyIiwibiI6dHJ1ZSwidnhfcHJpY2UiOjEwMS4wMDEsInZ4X3NlY29uZF9wcmljZSI6MTAwLjAwMSwiY2NfaXNvMiI6IlVTIiwiaXNfczJzIjpmYWxzZSwic3YiOiI3LjAuMC1xYTE2Iiwib3MiOiJ3aW5kb3dzIiwiZGV2X2lkIjoiNWEwYzFlNTk0MDIzZjBlYTcwNjdmN2IzZTk2Y2EyZmQiLCJkZXZfaWRfc291cmNlIjoiSUZBIiwicnRiX2lkIjoiNjRkYjI5NThiMTNiYjJjODcwYmE5NzI0In0=", "adm": "{\"version\":2,\"adunit\":\"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\",\"impression\":[]}", "adomain": ["domain1.com"], "bundle": "9P5LPK6CRX64", "cid": "kraken_online_feeder_cid", "crid": "685c7bfa7ae70dc10f9d151e" } ], "seat": "vungle" } ], "bidid": "68e6cdfc496a5c6f19f3df9a", "cur": "USD", "ext": { "test": 1, "debug": {} } }Note the section labelled
”adm”. This”adm”section contains the string you must send toLoadMediatedAdandPlayMediatedAd. -
Using a JSON library, create a variable from the above ad markup, using the following as an example:
std::string adm = "{\"version\":2,\"adunit\":\"H4sIAAAJbogA/+x8/W/iOtb/v1Jld6XvVyrUCSQhSOiKhkBTXkKT8LpzZTmOA4a8TWKgdG7/90cOtIXOzN7uPndGz6z4qcR2bZ/POZ9zTuzYXwTk50L9n1+ENESYRCRmMCMByUiMCaS+UBdcw3HhrdlqmYMOHPaautE3Bm5JlkRV0iThWkA+jFC23qRC/YtQ/ItSIwr2A1zVFCRjJRC1oOIHGhKuBYyiFNFFXLSqVZAkahgEQPZVIgIVKzXZ+0OpyVj1AqQiogIfiyDQfFEWyR8+YijHtFRCm4WowmRJIHlMwyQjMGdoQeNFqfTlk5CvUVyKEp+En4R6vAnD51Ip32BM8rxUigjNGcn++BdzRGl6EP3v4O9fPh0fPwn1T4JSEzVMJBl4KtKqQMSSrAWYqJ+E608C2ZKYma1jw2/3/kl4Fq4F8pjSbC/URVXWNKWiqMq1wFLEhPoXAYcUr0dZKNT/KSwZS/P6zQ1K0zJK0zwI9yQr4yS60YZyb9hVdHuqVH9Lqd/YbuJFSCCN2acNAJKCAphTRqjfkFVN1apADjwQeGqAFQIAAEg6tMMNSQaqJMMdjeFkAqGjQzPOGQpDqFt9aA1f+8NJzmABa0MfmufFWxRuSAOU1fNivMm4Je0bI6f1VgOp3/ie8l9bIb+h96GoSeBRBDUAtxKoQWMAE1gB+f/bSv//pOWhw28bzWuzfONVGtruyY9xFix3vnRaIzecJKQM0Yz8QwJ6EoYEM5rE/5DAhMZ+sstfWyMfsn1KGjRmJMsZZRSFr5WF9mCYJGsP4XVD9Q81RXExye+YRdEK+VuSMZrTeMEleu00I0FjfNDvd+2qaEtzGCLWYNmGCNev1sMtq4xSWt4WfRT2sxWL4t8Km4V/OrMIZWtStDs1vEPdoYsCkkLMk5GLqryM/Px0bJTSm616GB/5aSNAYf6iJn97FBtTv7HO0JrEMIlDGhMYEOKTDGL6gmn2p1r/oHTvJTiULr0CyCOy+PQh4g6hIR6fYnZSFyZvqkvyxu7UeFKUsZhkjQg9HguKqWFR0wINqKoaVEUsEgQ8STl2nm68hqypikL8Csaap9VIRRUBANjDhxYFClXfkzS55okVz5NwTQUe0lTpqKDcX8MtyRpqGZTBoYiR/HTSW+4mEMAikbUqkCoBIEgFihqoXoVoCkZScAR9S4/Wb7abwu/XAl4SvE4TGrMyOPVYNEozkuc0iS+O65dwXFtKdmyZJZvF8s19SdXlf4f/wn8acT7gTWiAjs6poM+RSn6ecnZxU29sK2WxJpXBPyS9WpakWvFrK5ZluQy+7RJ8sqVFotUAFQAkgGUgA6DhqgwUAABnehUAEalV/ldRiML/eiio8LpKzfeBBICEtQBoAHiKVjnO1Yd5sskwaaB8uXtxmcjfQp7N5CzJikG/m88Uzd9SwsI3BpswzHFGSHyo9rgvyBs8iZEqsqLUaupRSj7OvwoZiLEMRoQtkxdXyf2Kv8kQj7kNSXvx8NxmgySLEGtsqU+S1/JiQluUH50GzSHasCQN0R5uT1xzDgtjR5jRLXnRWL5OitYN8JX7zxnK2C8dwAoJLgHsQwHsOD6JEkYgt53Gly9fTh6fn58/ZAtvwe438sgaWCPSftF2jLZlf96FeP1Z3vaWu88h2FvbjeIO1vu9dDsFt1Y4fFThKlhmdDWklfsqW+67FK6V6Z15F4V3LdOyJ6Qqdpd3ebsNo950vtwhxZYWS3d4B/dad/u5V/FnMekmobPZS7v50/2CrieDBylrz0oaM1N573c7rusEBgmrT09L4C56U6xV1AosPfTXgWI4qrv73FZmdlWZS2O9ddfLp0HNHixl3Ysmm37SCfNm1nP7E2dYXeZQm0ZrOFwse3O1Ml11Z9v+VEzd/vKxXXvyKmo0XyS99F5ZrecTAqy5urXaA8UfRCs66+or3G4yNZ1htxc+buR+5t0qStc0K6vJ7Z1bWiuDPdNNy3M9VYXrLh7Z69JsB9Qptmeacpsli4g9fk6TXRrOFgFY70riYmo5kj8yHh5sr7ICo00l0JTqYtp7aLe3cCgu+7uHp512700WFT2+Mx61jRNBtNmVPj/W9gMLKrY5bk9c/PAEo5a1gul23Nxl6aydleR5P7mdB2v1oSapgenU4hbGhO4ecXsX1ZrN9SiyNq1wKBvpYvCkrRf3WqwPguXKinvVvaPZUo76t5N2t5M9zZXEXy6seRZa7qg22My7ajBNO607B6yWeQDtbas9cKdtr9MzwqHaS+OJ8hDe9lwjN4CyD5DpZ2H1zoCpcd/LktV60MSy7dn9fXeoj1f2Oh510r2kLQ3QNrb2CMW9drd/j/sP88/Iuhuvk0U/eJJyNp+nMtUMuJLpXlyk+aTkPLzL5SRZqP/zEoD/8gB88qYR0CxnDxuUMRqSD7mZ/6vvTGeSXELPh0LPu3cn+ezl6ZLw/lUJ7wnfIuoXWP/SVHsR4sKy/4Rl6iWq/eioxpY08/8rotqZJBe+/Sd8E8ElrP3osIaTKA0J+7UzyBchLjT7MM3SJGdZEoZlvnB7YdkPZhmJfYwyv1gl/6WZRmJfR5k/pmR3Idu/T7ZiH+TCtp/EtgPav18Lxdp/GYdJTi7g/2DwC6zhAetf2dMVcuhcjIuj+7CjK0Arb+Jowy5M+9FMO8L8K5PsIMKFYP8mwS70+gn0+uXJdaHWv0WtImW53TCWxPolTf8JaXoBOPQKxN9y9ZigTL+o4ueqgoMOv60PP9nFYYL8MmbowoufwguGvgE//3rOKb6eu2jhZ2jh7WvFbyij6Vim+fJlYBJflPGDlYHyhL59ipnEXylDP+4AXDTxMzTxumn0+7VQfAvcpczakixE+zL/MtZKSVwuKozDUpxLI5JddPODdVMgDteUweSgjOIzZZikpCAMfx+45Lc/L7/leH+VTqUZ3SK8v+jh5+nhCPnXqgjRHnnhi4+6pFU/I616AR1+tUmTkR3K/E6GYkb8Uz38esuaZ6JcVjc/vLrpE5KGNF5/vU/669nAiyyFW7nYwIds4Jh9hTDfYH6Whub8Fz93z4/S/H4tRMnhkDvNIYm57/aFerGfwc/EswxBfqRLqAvC8zO3phDthTq4FvJlsivWlM6fzBiTmNEtfeL9gGsBJ5uY8QWPot2GH6IXhOP28YT6bFmUF5tcd4Qulqx4xigM3aRZnPcuDt5fzt1fzt3/L87dxwmjAcXFWcaPxUG+PgeRfzk9djk99sueHkO+u0+JUBeOHjHKEPWFa4GRKA0RIyO7d+JZsR+XQu909eClXX6DQE0CXsWrBLUKIUDFOKgoKhaJWlUUVAXlJ5qedOwQxmi8yPnlKTE/KxzCjLweXS6KR45hw2bHGLhCXSD7e4ojrYKl8d5cpaoZyUtvMqIWvW/PO35o0h31o/EeS+HWo6ZiroynvlPd9VbNTV+/13r6/Xo+naczaUStOKfeRFvPJztqUZP29HtAprehuUqoV7GT+dSkgbOjXqV/aBu12dwxFTP2Uy+yt36lT4MpaAjXgnXrGPbYaEFjOjRsk9+x4/Dbd46wQDsJw2TDrnpJktJ4cTXmUax+9nS1VcBV6cpBAcroVUAf/8hZRlCUbuI13Ir1AV9L4F4JhX/wBTd+aBUaOrxz+z1+kQ7JKL8AqB7zdsK1MDZbhgX1nuUY8HbkutYANh3odM2hUBeKsC1cC683AkF3NjR4xevCq3AtNFvQsUa2ziuonxe9jgadngGHtjlu6jN4bhfHd71ySAOWBEGZJje8l+EQDpp93omeIT8kV0lw1Ud7dHW8nEW4FnS3+TLJW8tuGbZQF1iG4jxFGSmO/QxHt9BsCXXhe+mTcC0MmiPX7I0cODZsx7QG3J5BWQNlIFwLttHsQcdt2i7sj1yjdYKCc2dNzpHSrdHAbVkT3sXxQgMuhuNatnGYxulVKsK14HQhl8Ea9GZCXfBJgDYhn7bThW1HPys6kfUcvt1uV44ozpI8CVixKEfi0ia/SfkVQmfJC0dVd01rAF27qXfNQedUmq41NuxecwabI9c6rWh1T5ApdnFLn5GoCNdC32iZzaLDo6Yi9ChcC+ZANwauOTbnRusIkGtMOQ/14ydmd0azZdgvN0y9oeXemXYLDpsdg2Pumjo0Bi29aZ/CfgIE7xXqVs/iiv9bEAQH23Tblt0X6sLx7ZmLPXIt2LP0Zs+cG2/DnU3UNd3e+USv2JLmV8j/jYvaHxbAQL1n6t1vcqFQ8Pf209/Dcmu1Zi+DNTNytU82V/nm+GOHYnbFkqt8TdPXSVzNks1VtMnZVUBjmi+vdojhJXcLLLnCIaIR7yS7OrzIljlS3BztGdStFhd65HylG2vgmoPRm9RJzGhcJDRndu0cUBNr6eOZpbRMp286jnnbM85s9bZn6V045HRyXO4mdLf5hvqJAm+berdjW6MBh+5vsiy32+2vJnk6k5bBx3UM3Rq0uKvkFHUMh9P2gL9LcnbV9F892dC2OrbhOPC2ab9NwbLNjjlo9qBr9LnBGC8GfOZbi5m4hs1JMzZg0eFbH2+EGVqOyVlwhkG/OYXNFmyN7OaxrgLOXdYR9NZxT+Q96MPmCzlAAfuRCX/mm7nDaRmObpvD47jNidG/6jT7hnPVc1t8GNtoFhIdLfbbC1mnMBWiwz8L508kvgGKVsM1T8FElDWxSjyMfKzhAPm+L0sKKmkKeJSroLSUlGrpQSpHKfdL7VGvd24l1qk/FkEZlCVFBKCsyDX+D6YDX9hrQNc0WtB9F7YKUzkh6red+L+0LhGcm/u7all45m+SeEn4a+1XGUi/aQ5ejOaLsDl7y/xLwSOPjMR840OoCxzO54MVmLo1+MjIKM8Jy2++dy/MDcVJXE7jxbuReMlxJG7ig85HxnrL+I7BLr+h0eKmWpZL/BaTvJxv34/DS56vhbY1cA8W+H6UIOGvWIucIUZxYYj5Dd8/yVGc32zFyg2+n3eJtbnN4urasB8/MzS6qzhzKdnnifFgkO5utYimPTt2cZmx4N34vOSZr028zN0srjusyhgrkopk3yNIklVNJaQC0EmSWry6vk+OjhcnFherfZ0P8HvmkjXhYpP9/Wo2EXezSRgfUtJZ1WoNlv2VIc+ebqN+a7weSKPHfstfDVYLcRbvJKs1Xg2k+2jm+su5i3fzTv+x35nJ85Yh9ifj2rzTBrPpYIUcwGbTcdx3/cCTluFUGldx53GLo3GAK/ZyLoWb+R4wIu4oltjSoyLzJDv02jtqRbLodR61niM++ZPBaj4dPPUckc0n4ZPfGe+D1qw6d+ereWe+GrTW0swdrwbR7NGazJ7mnZk8c+61l/UZmHgrgo9QHBbUNd+rBqpXkyStimXRR57Al5k/b2hGcphTn3BfSePF6yIS8p1ih+0t22Q0IjlDUXq8bVFWqqry/Pz78/8AAAD//wMABDi2AvpSAAA=\",\"impression\":[]}"string adm = "{\"version\":2,\"adunit\":\"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\",\"impression\":[]}"; -
Call
LoadMediatedAdwith the placement name, the text from theadmsection, and some optional success and failure callbacks:AdLoadCallback callbacks; callbacks.OnAdLoadFailure = OnAdLoadFailure; callbacks.OnAdLoadSuccess = OnAdLoadSuccess; // Call into the SDK to load the mediated ad bool loaded = m_sdk->LoadMediatedAd(placementID, callbacks, adm);m_sdk.LoadMediatedAd("<placement name from dashboard>", adm);Your
OnAdLoadSuccesscallback will notify you when the ad is ready to play. -
Call
PlayMediatedAdwith andAdConfig, the placement name, the ad markup section, and callbacks to play the ad:AdPlayCallback playCallbacks; playCallbacks.OnAdStart = OnAdStart; playCallbacks.OnAdEnd = OnAdEnd; playCallbacks.OnAdPlayFailure = OnAdPlayFailure; playCallbacks.OnAdPlayRewarded = OnAdPlayRewarded; playCallbacks.OnAdPlayClick = OnAdPlayClick; // Optionally, you can modify AdConfig to change the hWnd // window where the ad will play, and also "Incentivized" text // for any "Rewarded" ads you are playing AdConfig config; // Call SDK: Play a mediated ad (header-bidding) synchronously LiftoffAdPlayInfo info = g_sdkInstance->PlayMediatedAd(config, placementID, playCallbacks, adm);AdConfig adConfig = new AdConfig(); var retVal = await m_sdk.PlayMediatedAdAsync(adConfig, placement,adm);Refer to the following example of the
AdConfig:class AdConfig { public: // Gets or sets the title of the confirmation dialog when skipping an incentivized ad. std::string IncentivizedDialogTitleText = ""; // Gets or sets the body of the confirmation dialog when skipping an incentivized ad. std::string IncentivizedDialogBodyText = ""; // Gets or sets the 'cancel button' text of the confirmation dialog when skipping an incentivized ad. std::string IncentivizedDialogCloseButtonText = ""; // Gets or sets the 'continue button' text of the confirmation dialog when skipping an incentivized ad. std::string IncentivizedDialogContinueButtonText = ""; // Use this to override which window the ad is displayed in. // If this is not set, the SDK will use the main window provided during initialization. HWND hPublisherWnd = nullptr; };public sealed class AdConfig { ////// Gets or sets the title of the confirmation dialog when skipping an incentivized ad. /// public string IncentivizedDialogTitleText { get; set; } = String.Empty; ////// Gets or sets the body of the confirmation dialog when skipping an incentivized ad. /// public string IncentivizedDialogBodyText { get; set; } = String.Empty; ////// Gets or sets the 'cancel button' text of the confirmation dialog when skipping an incentivized ad. /// public string IncentivizedDialogCloseButtonText { get; set; } = String.Empty; ////// Gets or sets the 'continue button' text of the confirmation dialog when skipping an incentivized ad. /// public string IncentivizedDialogContinueButtonText { get; set; } = String.Empty; ////// (Advanced) Offset the ad from the left side of the client's window by this many pixels. /// public int XOffset { get; set; } = 0; ////// (Advanced) Offset the ad from the top of the screen by this many pixels /// public int YOffset { get; set; } = 0; ////// Gets or sets the starting "mute" state for the ad. If true, the audio /// will mute even if sound settings on the dashboard are true. /// If false, audio will play according to dashboard settings. /// public bool StartMuted { get; set; } = false; } }