跳到主要内容

MG Ads 广告接入指南

简介

本文档面向接入 MG Ads SDK 的开发者,介绍如何正确接入各类广告功能。

⚠️ 重要提示:在调用广告功能之前,必须依次完成 CMP 接口和 SDK 初始化接口的调用。两者缺一不可。具体请参考CMP与SDK初始化接入指南

MG Ads 支持以下广告类型:

序号广告类型默认尺寸支持 MediaType
1全屏广告1920×1080image、web、video
2退屏广告--
3横幅广告728×90image、web
4插屏广告1024×768image、web、video
5对联广告300×600image、web
6激励广告1024×768web、video
7自定义广告-image、web、video

广告调用流程

应用启动

调用 OpenCmp()

等待用户完成选择

调用 Initialize()

SDK 初始化完成

调用广告接口

广告展示

⚠️ 强制要求:所有广告接口必须在 Initialize() 成功完成之后调用。


接入前准备

步骤一:引入命名空间

using MiracleGamesAd;
using MiracleGamesAd.Models;

步骤二:完成 CMP 与 SDK 初始化

请参考CMP与SDK初始化接入指南,确保完成:

  • OpenCmp()

  • Initialize()

步骤三:创建广告位

登录 MG Ads 开发者后台 创建广告位,并获取广告位 ID(AdUnitId)。

开发者可参考 MG Ads 开发者文档中的广告位创建说明:MG Ads - 开发者文档中心 | 完整的SDK接入指南与API参考 | MG Ads

步骤四:调用广告接口

根据业务场景选择对应广告类型:

使用场景推荐广告类型
游戏启动页全屏广告
游戏暂停页插屏广告
游戏主界面横幅广告
游戏结算页激励广告
游戏退出时退屏广告
自定义 UI 区域自定义广告

广告素材类型说明

每种广告类型均支持通过 MediaType 参数指定素材类型,可选值如下:

MediaType 值说明广告来源
image图片广告,默认支持MG
web网页广告,默认不开放,如需使用请在创建广告位后联系 MG 产品经理申请开通权限Google
video视频广告,默认支持(部分广告类型支持)MG

⚠️ 重要提示:Web 类型广告(MediaType 设置为 "web")默认不开放,如需使用,请在创建广告位后联系 MG 产品经理申请开通权限。

步骤五:处理广告结果

根据接口返回结果判断广告是否展示成功。

if (result.ReturnValue)
{
// 广告展示成功
}
else
{
// 广告展示失败
}


广告接入

全屏广告

说明:全屏广告会覆盖整个应用界面,适用于游戏启动页、场景切换页、关卡开始前等场景。

IAsyncOperation<AsyncProcessResult> ShowAd(string unitId, AdType adType, FullScreenAdSettingOptions options)

参数说明

参数类型必要性说明
adUnitIdstring必填广告位唯一标识,32位小写字母数字组合,在 MG 广告后台创建获取
adTypeAdType必填广告类型,全屏广告请使用 AdType.FullScreen
optionsFullScreenAdSettingOptions可选广告配置参数,未设置时使用默认状态

FullScreenAdSettingOptions 对象说明

参数类型说明
MediaTypestring支持的广告类型,可用的值包括:
● image:图片广告,默认支持
● web:网页广告,需联系 MG 产品经理申请开通权限
● video:视频广告,默认支持

返回值说明

场景说明
ReturnValue = true广告展示成功,且用户已关闭广告
ReturnValue = false广告展示失败

完整示例代码

public async void ShowFullScreenAd()
{
FullScreenAdSettingOptions fullScreenAdSetting = new FullScreenAdSettingOptions();
fullScreenAdSetting.MediaType = "image";
var result = await AdvertisingManager.ShowAd("0123456789abcdef0123456789abcdef", AdType.FullScreen, fullScreenAdSetting);

if (result.ReturnValue)
{
// 广告展示成功,且用户已关闭广告
}
else
{
// 广告展示失败,直接继续原有流程
// 常见原因:广告位配置错误、网络故障、无可用广告素材
}
}


横幅广告

说明:横幅广告通常固定显示在界面顶部、底部或指定区域,适用于游戏主界面等场景。

IAsyncOperation<AsyncProcessResult> ShowAd(string unitId, AdType adType, BannerAdSettingOptions options)

参数说明

参数类型必要性说明
adUnitIdstring必填广告位唯一标识,32位小写字母数字组合,在 MG 广告后台创建获取
adTypeAdType必填广告类型,横幅广告请使用 AdType.Banner
optionsBannerAdSettingOptions可选广告配置参数,未设置时使用默认状态

BannerAdSettingOptions 对象说明

参数类型说明
MediaTypestring支持的广告类型,可用的值包括:
● image:图片广告,默认支持
● web:网页广告,需联系 MG 产品经理申请开通权限
VerticalAlignmentVerticalAlignment垂直对齐方式,可用的值包括:
● Top:顶部对齐
● Center:居中对齐
● Bottom:底部对齐(推荐且默认值
HorizontalAlignmentHorizontalAlignment水平对齐方式,可用的值包括:
● Left:左对齐
● Center:居中对齐(推荐且默认值
● Right:右对齐

返回值说明

场景说明
ReturnValue = true广告展示成功,用户点击关闭按钮后触发回调
ReturnValue = false广告展示失败

完整示例代码

public async void ShowBannerAd()
{
var opt = new BannerAdSettingOptions();
opt.MediaType = "image";
opt.VerticalAlignment = VerticalAlignment.Bottom;
opt.HorizontalAlignment = HorizontalAlignment.Center;
var result = await AdvertisingManager.ShowAd("0123456789abcdef0123456789abcdef", AdType.Banner, opt);

if (result.ReturnValue)
{
// 广告展示成功,用户关闭广告时触发
Debug.Log("横幅广告已关闭");
}
else
{
// 广告展示失败
Debug.Log("横幅广告展示失败");
}
}


插屏广告

说明:插屏广告会在应用流程节点弹出展示,适用于关卡结束、页面切换、游戏暂停等场景。

IAsyncOperation<AsyncProcessResult> ShowAd(string unitId, AdType adType, InterstitialAdSettingOptions options)

参数说明

参数类型必要性说明
adUnitIdstring必填广告位唯一标识,32位小写字母数字组合,在 MG 广告后台创建获取
adTypeAdType必填广告类型,插屏广告请使用 AdType.Interstitial
optionsInterstitialAdSettingOptions可选广告配置参数,未设置时使用默认状态

InterstitialAdSettingOptions 对象说明

参数类型说明
MediaTypestring支持的广告类型,可用的值包括:
● image:图片广告,默认支持
● web:网页广告,需联系 MG 产品经理申请开通权限
● video:视频广告,默认支持

返回值说明

场景说明
ReturnValue = true广告展示成功,且用户已关闭广告
ReturnValue = false广告展示失败

完整示例代码

public async void ShowInterstitialAd()
{
var opt = new InterstitialAdSettingOptions();
opt.MediaType = "image";
var result = await AdvertisingManager.ShowAd("0123456789abcdef0123456789abcdef", AdType.Interstitial, opt);

if (result.ReturnValue)
{
// 广告展示成功,且用户已关闭广告
// 在此恢复被广告中断的业务逻辑
}
else
{
// 广告展示失败,直接继续原有流程
}
}


对联广告

说明:对联广告会固定显示在界面左右两侧,适用于 PC 端网页游戏等场景。

IAsyncOperation<AsyncProcessResult> ShowAd(string unitId, AdType adType, CoupletAdSettingOptions options)

参数说明

参数类型必要性说明
adUnitIdstring必填广告位唯一标识,32位小写字母数字组合,在 MG 广告后台创建获取
adTypeAdType必填广告类型,对联广告请使用 AdType.Couplet
optionsCoupletAdSettingOptions可选广告配置参数,未设置时使用默认状态

CoupletAdSettingOptions 对象说明

参数类型说明
MediaTypestring支持的广告类型,可用的值包括:
● image:图片广告,默认支持
● web:网页广告,需联系 MG 产品经理申请开通权限

返回值说明

场景说明
ReturnValue = true广告展示成功,且用户已关闭广告
ReturnValue = false广告展示失败

完整示例代码

public async void ShowCoupletAd()
{
var opt = new CoupletAdSettingOptions();
opt.MediaType = "image";
var result = await AdvertisingManager.ShowAd("0123456789abcdef0123456789abcdef", AdType.Couplet, opt);

if (result.ReturnValue)
{
// 广告展示成功,且用户已关闭广告
}
else
{
// 广告展示失败
}
}


激励广告

说明:激励视广告用于用户观看完整广告后获得奖励,适用于游戏结算页、复活、领取双倍奖励等场景。

IAsyncOperation<AsyncProcessResult> ShowAd(string unitId, AdType adType, RewardAdSettingOptions options)

参数说明

参数类型必要性说明
adUnitIdstring必填广告位唯一标识,32位小写字母数字组合,在 MG 广告后台创建获取
adTypeAdType必填广告类型,激励广告请使用 AdType.Reward
optionsRewardAdSettingOptions必填广告配置参数

RewardAdSettingOptions 对象说明

参数类型说明
MediaTypestring支持的广告类型,可用的值包括:
● web:网页广告,需联系 MG 产品经理申请开通权限
● video:视频广告,默认支持
Commentstring开发者自定义参数(需 URL 编码)

返回值说明

广告播放完成后,返回结果中的 Tag 属性会携带 RewardAdCompleteState 对象,其字段如下:

属性类型说明
IsCompletedbool用户是否完整观看视频并满足发奖条件
Commentstring透传参数:开发者自定义参数(需 URL 编码)。调用广告接口时传入,会在广告播放完成的回调中原样传回。开发者可根据该参数识别奖励类型、数量等,用于激励广告奖励的发放。
RewardIdstring奖励唯一标识,用于向 MG 服务核销本次视频奖励

奖励发放流程

┌─────────────────┐
│ 调用 ShowAd() │
│ (传入激励广告参数) │
└────────┬────────┘

┌─────────────────┐
│ 用户观看广告 │
└────────┬────────┘

┌─────────────────────────────────────────┐
│ 广告播放完成,回调返回 RewardAdCompleteState │
└────────┬────────────────────────────────┘

┌─────────────────┐ ┌─────────────────┐
│ IsCompleted=true │ │ IsCompleted=false│
│ (完整观看) │ │ (未完整观看) │
└────────┬────────┘ └────────┬────────┘
↓ ↓
┌─────────────────┐ ┌─────────────────┐
│ 发放游戏奖励 │ │ 不发放奖励 │
└────────┬────────┘ └─────────────────┘

┌─────────────────────────────┐
│ 调用 ReportAdRewardFulfillment() │
│ 通知 MG 后台核销 │
└─────────────────────────────┘

完整示例代码

public async void ShowRewardAd()
{
// 自定义奖励参数(示例:发放100金币)
var json = "{\"coin\":100}";
var result = await AdvertisingManager.ShowAd("0123456789abcdef0123456789abcdef",
AdType.Reward,
new RewardAdSettingOptions
{
MediaType = "video", // web(网页,需开通权限)、video(视频)
Comment = WebUtility.UrlEncode(json), // 开发者自定义参数
});

if (result.ReturnValue && result.Tag is RewardAdCompleteState completeState)
{
if (completeState.IsCompleted)
{
// 用户完整观看视频,执行发奖逻辑
var comment = WebUtility.UrlDecode(completeState.Comment);
// 向 MG 服务核销激励广告奖励
AdvertisingManager.ReportAdRewardFulfillment(completeState.RewardId);
}
else
{
// 用户未完整观看视频,不发放奖励
}
}
else
{
// 广告展示失败或播放异常,不发放奖励
}
}

💡 提示

  • 激励广告广告需在回调中根据 IsCompleted 判断是否发奖,避免未完整观看即发放奖励。

  • Comment 字段可用于传递游戏内参数(如奖励类型、数量等),请务必在传入时进行 URL 编码,解码后使用。

  • 成功发奖后应调用 ReportAdRewardFulfillment 通知 MG 后台完成核销。


自定义广告

说明:自定义广告允许开发者指定广告展示容器,适用于信息流广告、列表内嵌广告、自定义 UI 区域的广告展示等场景。开发者需要提前在 XAML 中定义一个容器控件(如 Border、StackPanel、ContentControl 等),然后将该容器传入 SDK。

IAsyncOperation<AsyncProcessResult> ShowAd(string unitId, AdType adType, CustomAdSettingOptions options)

参数说明

参数类型必要性说明
adUnitIdstring必填广告位唯一标识,32位小写字母数字组合,在 MG 广告后台创建获取
adTypeAdType必填广告类型,自定义广告请使用 AdType.Custom
optionsCustomAdSettingOptions必填广告配置参数

CustomAdSettingOptions 对象说明

参数类型说明
MediaTypestring支持的广告类型,可用的值包括:
● image:图片广告,默认支持
● web:网页广告,需联系 MG 产品经理申请开通权限
● video:视频广告,默认支持
ContainerPanel / ContentControl / UserControl开发者创建的控件实例,支持 Panel、ContentControl、UserControl 及它们的派生类

返回值说明

场景说明
ReturnValue = true广告内容已成功渲染到指定容器,且用户已关闭广告
ReturnValue = false广告展示失败

完整示例代码

public async void ShowCustomAd()
{
var adSettingOptions = new CustomAdSettingOptions
{
MediaType = "image",
Container = CustomContainer // 开发者创建并维护的控件实例
};
var result = await AdvertisingManager.ShowAd("0123456789abcdef0123456789abcdef", AdType.Custom, adSettingOptions);

if (result.ReturnValue)
{
// 广告内容已成功渲染到指定容器,且用户已关闭广告
}
else
{
// 自定义广告展示失败
}
}


退屏广告

说明:退屏广告是在退出游戏时触发。为保证退出游戏时广告的弹出率,MG 建议在初始化完成后首先将退屏广告的信息加载到内存中。退出游戏时,SDK 会自动直接打开退屏广告。

void SetupExitunitId(string adUnitId)

参数说明

参数类型必要性说明
adUnitIdstring必填广告位唯一标识,32位小写字母数字组合,在 MG 广告后台创建获取

完整示例代码

// 在 SDK 初始化完成后调用
AdvertisingManager.SetupExitunitId("0123456789abcdef0123456789abcdef");

接入退屏广告时需要对UWP工程做以下配置

退屏广告需要在应用退出时拦截系统的关闭事件,并在关闭前展示广告。UWP 应用默认不允许应用拦截退出事件,因此需要做以下配置:

步骤操作说明
1将主工程的 Properties → Application 页签中 Target version 改为 19041(或更高版本)
2右键 Package.appxmanifest,选择"Xml编辑器"打开编辑
3在 Package 标签中增加 xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities",并在 IgnorableNamespaces 中补充 rescap
4在 Capabilities 节点下增加:<rescap:Capability Name="confirmAppClose"/>
5保存即可

广告预加载功能

⚠️ 适用场景说明:预加载功能仅适用于接入了多个广告平台(如同时接入了AppLovin、Vungle、优量汇、MG 等多套 SDK)的开发者。如果仅接入 MG Ads 单一平台,建议直接使用 ShowAd(),无需使用预加载模式。

预加载功能提供两个独立的接口,帮助您在广告展示前提前准备素材,提升展示成功率。

  • 预加载接口(PreloadAd):提前请求并缓存广告素材

  • 展示预加载广告接口(ShowPreloadAd):展示已预加载成功的广告

💡 提示:预加载功能适用于所有广告类型。您可以在需要展示广告之前,提前调用预加载接口,待广告准备就绪后再通过展示接口进行展示。

预加载核心规则

规则说明
单条缓存SDK 每个广告位仅缓存一条广告,在未播放完成前不能再次请求预加载
播放完成后再预加载下一条广告展示完成后,才能再次调用 PreloadAd() 预加载下一条广告
ID 与类型必须一致ShowPreloadAd() 的 adUnitId 和 adType 必须与 PreloadAd() 完全一致

最佳实践案例

场景:激励广告广告在关卡结束后用于领取双倍奖励

关卡开始前

调用 PreloadAd() 预加载激励广告

玩家通关

调用 ShowPreloadAd() 展示广告

广告播放完成

开启下一关

再次调用 PreloadAd() 预加载下一条

预加载接口

IAsyncOperation<AsyncProcessResult> PreloadAd(string adUnitId, AdType adType, string mediaType)

参数说明

参数类型必要性说明
adUnitIdstring必填广告位唯一标识,32位小写字母数字组合
adTypeAdType必填广告位类型
mediaTypestring可选广告素材类型,可用的值包括:
● image:图片广告,默认支持
● web:网页广告,需联系 MG 产品经理申请开通权限
● video:视频广告,默认支持

返回值说明

场景说明
ReturnValue = true预加载成功,可调用 ShowPreloadAd 展示广告
ReturnValue = false预加载失败,需要重新调用 PreloadAd 进行重试

完整示例代码(插屏广告)

private async void PreloadInterstitialAd()
{
var result = await AdvertisingManager.PreloadAd("0123456789abcdef0123456789abcdef", AdType.Interstitial, "image");
if (result.ReturnValue)
{
// 预加载成功,可以调用 ShowPreloadAd 展示广告
}
else
{
// 预加载失败,建议重新调用 PreloadAd
}
}

展示预加载广告接口

IAsyncOperation<AsyncProcessResult> ShowPreloadAd(string unitId, AdType adType, IAdSettingOptions options)

参数说明

参数类型必要性说明
adUnitIdstring必填广告位唯一标识,必须与预加载时使用的 ID 一致
adTypeAdType必填广告位类型,必须与预加载时使用的类型一致
optionsIAdSettingOptions可选普通广告(全屏、插屏、横幅、对联)无需配置;激励广告或自定义广告类型时,需传入对应的配置对象(如 RewardAdSettingOptions、CustomAdSettingOptions)

⚠️ 注意事项:调用本接口前,请确保对应广告位已通过 PreloadAd 预加载成功。

示例代码

2.1 展示预缓存成功的全屏广告

public async void ShowPreloadFullScreenAd()
{
var result = await AdvertisingManager.ShowPreloadAd("0123456789abcdef0123456789abcdef", AdType.FullScreen);
if (result.ReturnValue)
{
// 广告展示完成
}
else
{
// 广告展示失败,可能原因:广告位未预加载、预加载过期、网络故障等
}
}

2.2 展示预缓存成功的横幅广告

public async void ShowPreloadBannerAd()
{
var result = await AdvertisingManager.ShowPreloadAd("0123456789abcdef0123456789abcdef", AdType.Banner);
if (result.ReturnValue)
{
// 广告展示完成
}
else
{
// 广告展示失败
}
}

2.3 展示预缓存成功的插屏广告

public async void ShowPreloadInterstitialAd()
{
var result = await AdvertisingManager.ShowPreloadAd("0123456789abcdef0123456789abcdef", AdType.Interstitial);
if (result.ReturnValue)
{
// 广告展示完成
}
else
{
// 广告展示失败
}
}

2.4 展示预缓存成功的对联广告

public async void ShowPreloadCoupletAd()
{
var result = await AdvertisingManager.ShowPreloadAd("0123456789abcdef0123456789abcdef", AdType.Couplet);
if (result.ReturnValue)
{
// 广告展示完成
}
else
{
// 广告展示失败
}
}

2.5 展示预缓存成功的激励广告

📝 说明:因预加载激励广告时已执行广告素材类型(通过 PreloadAd 的 mediaType 参数指定),因此 RewardAdSettingOptions 对象中无需配置 **MediaType** 参数,只需传入 Comment 参数即可。

public async void ShowPreloadRewardAd()
{
var json = "{\"coin\":100}";
var result = await AdvertisingManager.ShowPreloadAd("0123456789abcdef0123456789abcdef",
AdType.Reward,
new RewardAdSettingOptions
{
Comment = WebUtility.UrlEncode(json), // 透传参数
});

if (result.ReturnValue && result.Tag is RewardAdCompleteState completeState)
{
if (completeState.IsCompleted)
{
// 用户完整观看视频,执行发奖逻辑
var comment = WebUtility.UrlDecode(completeState.Comment);
AdvertisingManager.ReportAdRewardFulfillment(completeState.RewardId);
}
}
else
{
// 广告展示失败
}
}

2.6 展示预缓存成功的自定义广告

public async void ShowPreloadCustomAd()
{
var customAdSettingOptions = new CustomAdSettingOptions
{
Container = CustomContainer
};
var result = await AdvertisingManager.ShowPreloadAd("0123456789abcdef0123456789abcdef", AdType.Custom, customAdSettingOptions);
if (result.ReturnValue)
{
// 广告展示完成
}
else
{
// 广告展示失败
}
}

预加载功能调用流程

┌─────────────────────────────────────────────────────────────────┐
│ 应用启动 │
└─────────────────────────────┬───────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│ 调用 OpenCmp() 和 Initialize() │
└─────────────────────────────┬───────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│ SDK 初始化完成 │
└─────────────────────────────┬───────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│ 【预加载模式】调用 PreloadAd() 预加载广告素材 │
│ (如:关卡开始前预加载) │
└─────────────────────────────┬───────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│ 判断预加载是否成功 │
└─────────────┬───────────────────────────────┬───────────────────┘
↓ ↓
┌──────────┐ ┌──────────┐
│ 成功(true)│ │ 失败(false)│
└─────┬────┘ └─────┬────┘
↓ ↓
┌─────────────────────────┐ ┌─────────────────────────────┐
│ 等待用户触发广告展示时机 │ │ 重新调用 PreloadAd() 进行重试 │
│ (如:玩家通关后) │ │ 或降级使用普通 ShowAd() │
└─────────────┬───────────┘ └─────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│ 调用 ShowPreloadAd() 展示已预加载成功的广告 │
└─────────────────────────────┬───────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│ 广告展示完成 │
└─────────────────────────────┬───────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│ 再次调用 PreloadAd() 预加载下一条广告 │
│ (为下一次展示做准备) │
└─────────────────────────────────────────────────────────────────┘


关闭广告接口

说明:用于主动关闭当前正在展示的广告。适用于开发者需要在特定业务场景下主动结束广告展示的情况,例如页面切换、游戏退出、场景销毁等。

void CloseAd(string adUnitId)

参数说明

参数类型必要性说明
adUnitIdstring必填要关闭的广告位唯一标识,32位小写字母数字组合

返回值说明

无返回值。调用后 SDK 会尝试关闭指定广告位正在展示的广告内容。如果当前没有广告在展示,调用无效。

完整示例代码

public void CloseBannerAd()
{
AdvertisingManager.CloseAd("0123456789abcdef0123456789abcdef");
}

注意事项

  • 仅对当前正在展示中的广告生效。

  • 如果指定广告位当前没有广告正在展示,则调用不会产生任何效果。

  • 推荐在页面销毁、场景切换或游戏退出时主动调用。

常见问题(FAQ)

Q1:为什么必须先在后台创建广告位?

A:广告位 ID 是广告请求的唯一标识,需要在 MG 广告后台预先创建并配置广告素材,才能正常请求和展示广告。

Q2:广告展示失败怎么办?

A:常见原因及解决方法:

错误类型解决方法
广告位 ID 错误核对后台配置的32位小写字母数字组合ID
网络故障检查设备网络连接
无可用广告素材联系MG产品经理补充对应尺寸和格式的广告素材
预加载未完成调用 ShowPreloadAd 前确保 PreloadAd 已成功

Q3:激励广告如何发放奖励?

A:在 ShowRewardAd 的回调中判断 completeState.IsCompleted:

  • 为 true 时,表示用户完整观看视频,可发放奖励

  • 发放奖励后必须调用 ReportAdRewardFulfillment() 通知 MG 后台核销

Q4:预加载功能的好处是什么?

A:

  • 提前加载广告素材,减少用户等待时间

  • 提高广告展示成功率

  • 适用于需要精准控制广告展示时机的场景

Q5:OpenCmp 和 Initialize 未完成时能否调用广告?

A:不能。必须先完成 CMP 和 SDK 初始化,才能正常调用广告功能。否则可能导致广告请求失败或合规问题。

Q6:退屏广告为什么需要修改清单文件?

A:退屏广告需要在应用退出时拦截退出事件并展示广告,这需要 confirmAppClose 权限。修改清单文件是为了声明这个权限。具体配置原因请参见第三章第7节的配置说明。

Q7:预加载功能应该在什么情况下使用?

A:仅当您的应用接入了多个广告平台(如同时使用穿山甲、优量汇、MG 等多套 SDK)时,才建议使用预加载模式。单一平台场景直接使用 ShowAd() 即可。

Q8:预加载可以同时缓存多条广告吗?

A:不可以。每个广告位仅缓存一条广告,在未播放完成前不能再次请求预加载。广告展示完成后,应再次调用 PreloadAd() 预加载下一条。

Q9:ShowPreloadAd() 失败怎么办?

A:建议按以下顺序处理:

  1. 检查对应广告位是否预加载成功

  2. 检查广告位 ID 是否一致

  3. 检查广告类型是否一致

  4. 重新执行 PreloadAd()

  5. 降级为 ShowAd() 普通广告展示模式

Q10:自定义广告的 Container 可以是什么类型的控件?

A:支持 Panel、ContentControl、UserControl 及其派生类,例如 Border、StackPanel、Grid、ContentControl 等。

Q11:如何主动关闭正在展示的广告?

A:调用 CloseAd(string adUnitId) 接口,传入需要关闭的广告位 ID 即可。该接口适用于横幅、自定义等常驻型广告的提前移除。