使用MCSDK,您可以同时加载多个聚合SDK的广告位,并在广告展示时优先显示这些成功加载的广告位中价格最高的广告位。
注意:
- 为了降低接入成本,SDK的API是基于Max提供的,但还是会有差异。 详细内容请参考下面的文档说明。
- 您可以使用max ad unit id进行加载和展示,但必须添加全局配置JSON文件来映射max ad unit id等,这样sdk才能正常工作。
1. 集成
下载Unity插件
请联系我们获取SDK
将插件导入Unity
请按照以下步骤导入您下载的插件:
-
在Unity中,选择 Assets > Import Package > Custom Package…
-
选择您下载的 Unity 插件文件
-
在 Import Unity Package 的对话框中,点击 Import
要求
-
Unity 5.xx、Unity 2017.xx 或更高版本。(对于Admob,需要使用Unity 2022.3.x或更高版本)
-
对于 Android ,插件要求您启用 Jetifier。要启用 Jetifier,请执行以下步骤:
- 在 Unity 中,选择 Assets > External Dependency Manager > Android Resolver > Settings.
- 在显示的 Android Resolver Settings 对话框中,选中使用 Use Jetifier
- 点击 OK
-
对于 Android ,插件要求您生成模板 gradle 文件。要生成文件,请执行以下步骤:
- 在 Unity 中,选择 Project Settings > Player > Publishing Settings.
- 找到 “Custom Main Gradle Template”、“Custom Gradle Setting Template”、“Custom Gradle Properties Template”,然后选中它们
- 选择 Assets > External Dependency Manager > Android Resolver > Force Resolve
- 如果接入Admob,您必须添加Admob的APPLICATION_ID。请按照以下步骤进行添加:
-
- 在 Unity 中,选择 Project Settings > Player > Publishing Settings.
- 找到 “Custom Launcher Manifest”,然后勾选它
- 在生成的文件中添加配置,如下
-
在主线程调用所有API
2. 添加全局配置
2.1 创建 MCGlobalConfig.json 文件
注意:下面的mcRes.androidlib是文件夹目录的名称(必须包含“.androidlib”后缀)
在Assets/Plugins/Android/mcRes.androidlib/assets/LocalConfig目录下创建MCGlobalConfig.json文件
2.1.2 Unity 2021.2 以下版本
在Assets/Plugins/Android/assets/LocalConfig目录下创建MCGlobalConfig.json文件
2.2 配置 MCGlobalConfig.json
MCGlobalConfig.json的配置示例如下
{
"init_timeout": ,
"init_params": {
"max": {
"sdk_key":
},
"topon": {
"app_id": ,
"app_key":
}
},
"pl_info": [
{
"max": ,
"topon": ,
"format": "rewarded"
},
{
"max": ,
"topon": ,
"format": "interstitial"
},
...
]
}
JSON中的Key说明:
Key | 类型 | 说明 | 备注 |
---|---|---|---|
init_timeout | int | 初始化超时,单位:ms | (可选)默认:5000ms |
init_params | json object | 各聚合SDK的初始化参数 | (必需)MCSDK 根据此配置初始化Max SDK和Taku SDK |
pl_info | json array | 各个广告位之间的映射关系 |
(必需)MCSDK 根据此配置加载并显示来自 Max SDK 和 Taku SDK 的广告。当有多个广告位时,需要配置在这个json数组中 |
init_params:
Key | 类型 | 说明 | 备注 |
---|---|---|---|
init_params.max.sdk_key | string | Max的 sdk key | 必需 |
init_params.topon.app_id | string | Taku的 app id | 必需 |
init_params.topon.app_key | string | Taku的 app key | 必需 |
pl_info:
Key | 类型 | 说明 | 备注 |
---|---|---|---|
pl_info.max | string | Max的ad Unit Id | 必需 |
pl_info.topon | string | Taku的广告位ID | (可选)当Taku广告位需要一起加载并比价展示时,需要配置 |
pl_info.topon_adx | string | Taku Adx的广告位ID | (可选)当Taku Adx广告位需要一起加载并比价展示时,需要配置 |
pl_info.format | - | 广告形式 | (可选)该字段仅用于标识这组广告位。MCSDK 不会使用该字段 |
3. 初始化 SDK
添加 OnSdkInitializedEvent
事件, 然后在应用程序启动后立即初始化 SDK,如以下代码示例所示。
McSdkCallbacks.OnSdkInitializedEvent += (McSdkBase.SdkConfiguration sdkConfiguration) => {
// SDK is initialized, start loading ads
};
McSdk.SetUserId("USER_ID");
McSdk.InitializeSdk();
4. 激励视频
加载
以下代码向您展示了如何添加监听器并加载第一个激励广告:
string adUnitId = "YOUR_MAX_AD_UNIT_ID";
int retryAttempt;
public void InitializeRewardedAds()
{
// Attach callbacks
McSdkCallbacks.Rewarded.OnAdLoadedEvent += OnRewardedAdLoadedEvent;
McSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnRewardedAdFailedEvent;
McSdkCallbacks.Rewarded.OnAdDisplayFailedEvent += OnRewardedAdFailedToDisplayEvent;
McSdkCallbacks.Rewarded.OnAdDisplayedEvent += OnRewardedAdDisplayedEvent;
McSdkCallbacks.Rewarded.OnAdClickedEvent += OnRewardedAdClickedEvent;
McSdkCallbacks.Rewarded.OnAdHiddenEvent += OnRewardedAdDismissedEvent;
McSdkCallbacks.Rewarded.OnAdReceivedRewardEvent += OnRewardedAdReceivedRewardEvent;
McSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnRewardedAdRevenuePaidEvent;
// Load the first rewarded ad
LoadRewardedAd();
}
private void LoadRewardedAd()
{
McSdk.LoadRewardedAd(adUnitId);
}
private void OnRewardedAdLoadedEvent(string adUnitId, McSdkBase.AdInfo adInfo)
{
// Rewarded ad is ready for you to show. McSdk.IsRewardedAdReady(adUnitId) now returns 'true'.
// Reset retry attempt
retryAttempt = 0;
}
private void OnRewardedAdLoadFailedEvent(string adUnitId, McSdkBase.ErrorInfo errorInfo)
{
// Rewarded ad failed to load
// recommends that you retry with exponentially higher delays, up to a maximum delay (in this case 64 seconds).
retryAttempt++;
double retryDelay = Math.Pow(2, Math.Min(6, retryAttempt));
Invoke("LoadRewardedAd", (float) retryDelay);
}
private void OnRewardedAdDisplayedEvent(string adUnitId, McSdkBase.AdInfo adInfo) {}
private void OnRewardedAdFailedToDisplayEvent(string adUnitId, McSdkBase.ErrorInfo errorInfo, McSdkBase.AdInfo adInfo)
{
// Rewarded ad failed to display. Recommends that you load the next ad.
LoadRewardedAd();
}
private void OnRewardedAdClickedEvent(string adUnitId, McSdkBase.AdInfo adInfo) {}
private void OnRewardedAdHiddenEvent(string adUnitId, McSdkBase.AdInfo adInfo)
{
// Rewarded ad is hidden. Pre-load the next ad
LoadRewardedAd();
}
private void OnRewardedAdReceivedRewardEvent(string adUnitId, McSdk.Reward reward, McSdkBase.AdInfo adInfo)
{
// The rewarded ad displayed and the user should receive the reward.
}
private void OnRewardedAdRevenuePaidEvent(string adUnitId, McSdkBase.AdInfo adInfo)
{
// Ad revenue paid. Use this callback to track user revenue.
}
展示
调用 ShowRewardedAd()
展示广告
if (McSdk.IsRewardedAdReady(adUnitId))
{
McSdk.ShowRewardedAd(adUnitId);
}
下发奖励
为了奖励金额和货币,请重写 OnRewardedAdReceivedRewardEvent
回调:
private void OnRewardedAdReceivedRewardEvent(string adUnitId, McSdk.Reward reward, McSdkBase.AdInfo adInfo)
{
print("Rewarded user: " + reward.Amount + " " + reward.Label);
}
5. 插屏广告
加载
以下代码向您展示了如何添加监听器并加载第一个插屏广告:
string adUnitId = "YOUR_MAX_AD_UNIT_ID";
public void InitializeInterstitialAds()
{
// Attach callback
McSdkCallbacks.Interstitial.OnAdLoadedEvent += OnInterstitialLoadedEvent;
McSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnInterstitialLoadFailedEvent;
McSdkCallbacks.Interstitial.OnAdDisplayedEvent += OnInterstitialDisplayedEvent;
McSdkCallbacks.Interstitial.OnAdClickedEvent += OnInterstitialClickedEvent;
McSdkCallbacks.Interstitial.OnAdHiddenEvent += OnInterstitialHiddenEvent;
McSdkCallbacks.Interstitial.OnAdDisplayFailedEvent += OnInterstitialAdFailedToDisplayEvent;
McSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnInterstitialRevenuePaidEvent;
// Load the first interstitial
LoadInterstitial();
}
private void LoadInterstitial()
{
McSdk.LoadInterstitial(adUnitId);
}
private void OnInterstitialLoadedEvent(string adUnitId, McSdkBase.AdInfo adInfo)
{
// Interstitial ad is ready for you to show. McSdk.IsInterstitialReady(adUnitId) now returns 'true'
// Reset retry attempt
retryAttempt = 0;
}
private void OnInterstitialLoadFailedEvent(string adUnitId, McSdkBase.ErrorInfo errorInfo)
{
// Interstitial ad failed to load
// Recommends that you retry with exponentially higher delays, up to a maximum delay (in this case 64 seconds)
retryAttempt++;
double retryDelay = Math.Pow(2, Math.Min(6, retryAttempt));
Invoke("LoadInterstitial", (float) retryDelay);
}
private void OnInterstitialDisplayedEvent(string adUnitId, McSdkBase.AdInfo adInfo) {}
private void OnInterstitialAdFailedToDisplayEvent(string adUnitId, McSdkBase.ErrorInfo errorInfo, McSdkBase.AdInfo adInfo)
{
// Interstitial ad failed to display. Recommends that you load the next ad.
LoadInterstitial();
}
private void OnInterstitialClickedEvent(string adUnitId, McSdkBase.AdInfo adInfo) {}
private void OnInterstitialHiddenEvent(string adUnitId, McSdkBase.AdInfo adInfo)
{
// Interstitial ad is hidden. Pre-load the next ad.
LoadInterstitial();
}
private void OnInterstitialRevenuePaidEvent(string adUnitId, McSdkBase.AdInfo adInfo)
{
// Ad revenue paid. Use this callback to track user revenue.
}
展示
调用 ShowInterstitial()
展示广告
if ( McSdk.IsInterstitialReady(adUnitId) )
{
McSdk.ShowInterstitial(adUnitId);
}
6. 开屏广告
加载
以下代码向您展示了如何添加监听器并加载第一个开屏广告:
string adUnitId = "YOUR_MAX_AD_UNIT_ID";
private void InitializeAppOpenAds()
{
// Attach callbacks
McSdkCallbacks.AppOpen.OnAdLoadedEvent += OnAppOpenAdLoadedEvent;
McSdkCallbacks.AppOpen.OnAdLoadFailedEvent += OnAppOpenAdFailedEvent;
McSdkCallbacks.AppOpen.OnAdDisplayFailedEvent += OnAppOpenAdFailedToDisplayEvent;
McSdkCallbacks.AppOpen.OnAdDisplayedEvent += OnAppOpenAdDisplayedEvent;
McSdkCallbacks.AppOpen.OnAdClickedEvent += OnAppOpenAdClickedEvent;
McSdkCallbacks.AppOpen.OnAdHiddenEvent += OnAppOpenAdDismissedEvent;
McSdkCallbacks.AppOpen.OnAdRevenuePaidEvent += OnAppOpenAdRevenuePaidEvent;
// Load the first AppOpenAd
LoadAppOpenAd();
}
private void LoadAppOpenAd()
{
McSdk.LoadAppOpenAd(adUnitId);
}
private void OnAppOpenAdLoadedEvent(string adUnitId, McSdkBase.AdInfo adInfo)
{
// App open ad is ready to be shown. McSdk.IsAppOpenAdReady(AppOpenAdUnitId) will now return 'true'
}
private void OnAppOpenAdFailedEvent(string adUnitId, McSdkBase.ErrorInfo errorInfo)
{
// App open ad failed to load.
}
private void OnAppOpenAdFailedToDisplayEvent(string adUnitId, McSdkBase.ErrorInfo errorInfo, McSdkBase.AdInfo adInfo)
{
// App open ad failed to display.
}
private void OnAppOpenAdDisplayedEvent(string adUnitId, McSdkBase.AdInfo adInfo)
{
}
private void OnAppOpenAdClickedEvent(string adUnitId, McSdkBase.AdInfo adInfo)
{
}
private void OnAppOpenAdDismissedEvent(string adUnitId, McSdkBase.AdInfo adInfo)
{
// App open ad is hidden.
}
private void OnAppOpenAdRevenuePaidEvent(string adUnitId, McSdkBase.AdInfo adInfo)
{
// App open ad revenue paid. Use this callback to track user revenue.
}
展示
调用 ShowAppOpenAd()
展示广告
if ( McSdk.IsAppOpenAdReady(adUnitId) )
{
McSdk.ShowAppOpenAd(adUnitId);
}
7. 横幅广告
加载
使用您的广告单元 ID 和所需的横幅位置,调用以下代码
string bannerAdUnitId = "YOUR_MAX_AD_UNIT_ID"; // Retrieve the ID from your account
public void InitializeBannerAds()
{
// Banners are automatically sized to 320×50 on phones and 728×90 on tablets
// You may call the utility method McSdkUtils.isTablet() to help with view sizing adjustments
McSdk.CreateBanner(bannerAdUnitId, McSdkBase.BannerPosition.BottomCenter);
// Set background or background color for banners to be fully functional
McSdk.SetBannerBackgroundColor(bannerAdUnitId, );
McSdkCallbacks.Banner.OnAdLoadedEvent += OnBannerAdLoadedEvent;
McSdkCallbacks.Banner.OnAdLoadFailedEvent += OnBannerAdLoadFailedEvent;
McSdkCallbacks.Banner.OnAdClickedEvent += OnBannerAdClickedEvent;
McSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnBannerAdRevenuePaidEvent;
McSdkCallbacks.Banner.OnAdDisplayedEvent += OnBannerAdDisplayedEvent;
McSdkCallbacks.Banner.OnAdExpandedEvent += OnBannerAdExpandedEvent;
McSdkCallbacks.Banner.OnAdCollapsedEvent += OnBannerAdCollapsedEvent;
}
private void OnBannerAdLoadedEvent(string adUnitId, McSdkBase.AdInfo adInfo) {}
private void OnBannerAdLoadFailedEvent(string adUnitId, McSdkBase.ErrorInfo errorInfo) {}
private void OnBannerAdClickedEvent(string adUnitId, McSdkBase.AdInfo adInfo) {}
private void OnBannerAdRevenuePaidEvent(string adUnitId, McSdkBase.AdInfo adInfo) {}
private void OnBannerAdDisplayedEvent(string adUnitId, McSdkBase.AdInfo adInfo) {}
private void OnBannerAdExpandedEvent(string adUnitId, McSdkBase.AdInfo adInfo) {}
private void OnBannerAdCollapsedEvent(string adUnitId, McSdkBase.AdInfo adInfo) {}
使用带有#前缀的16进制的RGB字符串,来设置banner的背景颜色,例如: '#000000'
(黑色) 或者 '#fff200'
(黄色).
上面的示例在显示屏的底部中心创建一个横幅 ( BottomCenter
)。位置的可选项有:
-
TopLeft
-
TopCenter
-
TopRight
-
Centered
-
CenterLeft
-
CenterRight
-
BottomLeft
-
BottomCenter
-
BottomRight
您也可以通过调用 McSdk.CreateBanner(ad-unit-ID, x, y);
.在屏幕的指定(x, y)位置放置一个banner广告。位置(0,0)相当于TopLeft;要在Unity的屏幕大小和Android中使用的大小之间进行转换,请使用以下代码:
var density = McSdkUtils.GetScreenDensity();
var dp = pixels / density;
展示
调用 ShowBanner()
展示横幅广告
McSdk.ShowBanner(bannerAdUnitId);
隐藏
调用 HideBanner()
隐藏横幅广告
McSdk.HideBanner(bannerAdUnitId);
销毁
在您不再需要使用banner时(例如,当用户付费去广告),调用 DestroyBanner()
方法释放资源。当您正在使用多个相同Ad Unit ID的banner示例时,不要调用 DestroyBanner()
McSdk.DestroyBanner(bannerAdUnitId);
获取Banner位置
调用 GetBannerLayout()
获取banner的位置和大小。这使用的坐标系与加载banner时的Unity坐标系相同。
Rect bannerLayout = McSdk.GetBannerLayout(bannerAdUnitId);
设置Banner的宽度
调用 SetBannerWidth()
来手动设置banner的宽度。请确保将banner的宽度设置为大于最小值的大小(手机上为320,平板电脑上为728)。低于此宽度的横幅可能不会被广告商视为可见,这将影响您的收入
McSdk.SetBannerWidth(bannerAdUnitId, width);
停止和开启自动刷新
MCSDK不支持横幅广告的自动刷新。建议开发人员在横幅广告显示后的一段时间后调用以下代码,重新启动加载。如果不重新加载,横幅将始终显示某个聚合平台的广告。
McSdk.StopBannerAutoRefresh(bannerAdUnitId);
McSdk.LoadBanner(bannerAdUnitId);
注意:
- 建议关闭聚合SDK的自动刷新功能,手动调用McSdk.LoadBanner() 以一定的间隔重新加载横幅。
- 以下启用和停止自动刷新的方法仅对Max的adUnitId有效,对Taku的广告无效。如果Taku需要启用自动刷新,请在Taku后台进行设置(Taku后台-高级设置-自动刷新)
在某些情况下,您可能希望停止自动刷新,例如,如果您希望手动刷新横幅广告。要停止横幅广告的自动刷新,请使用以下代码:
McSdk.StopBannerAutoRefresh(bannerAdUnitId);
使用以下代码启动横幅广告的自动刷新:
McSdk.StartBannerAutoRefresh(bannerAdUnitId);
8. MRECs
加载
调用 CreateMRec()
加载MRECs广告,传入您的ad unit ID和期望放置的位置:
string mrecAdUnitId = "YOUR_MAX_AD_UNIT_ID"; // Retrieve the ID from your account
public void InitializeMRecAds()
{
// MRECs are sized to 300x250 on phones and tablets
McSdk.CreateMRec(mrecAdUnitId, McSdkBase.AdViewPosition.Centered);
McSdkCallbacks.MRec.OnAdLoadedEvent += OnMRecAdLoadedEvent;
McSdkCallbacks.MRec.OnAdLoadFailedEvent += OnMRecAdLoadFailedEvent;
McSdkCallbacks.MRec.OnAdClickedEvent += OnMRecAdClickedEvent;
McSdkCallbacks.MRec.OnAdRevenuePaidEvent += OnMRecAdRevenuePaidEvent;
McSdkCallbacks.MRec.OnAdDisplayedEvent += OnMRecAdDisplayedEvent;
McSdkCallbacks.MRec.OnAdExpandedEvent += OnMRecAdExpandedEvent;
McSdkCallbacks.MRec.OnAdCollapsedEvent += OnMRecAdCollapsedEvent;
}
public void OnMRecAdLoadedEvent(string adUnitId, McSdkBase.AdInfo adInfo) {}
public void OnMRecAdLoadFailedEvent(string adUnitId, McSdkBase.ErrorInfo error) {}
public void OnMRecAdClickedEvent(string adUnitId, McSdkBase.AdInfo adInfo) {}
public void OnMRecAdRevenuePaidEvent(string adUnitId, McSdkBase.AdInfo adInfo) {}
public void OnMRecAdDisplayedEvent(string adUnitId, McSdkBase.AdInfo adInfo) {}
public void OnMRecAdExpandedEvent(string adUnitId, McSdkBase.AdInfo adInfo) {}
public void OnMRecAdCollapsedEvent(string adUnitId, McSdkBase.AdInfo adInfo) {}
上面的示例创建了一个在屏幕中心的MREC(居中)。位置的完整可选项包括:
-
TopLeft
-
TopCenter
-
TopRight
-
CenterLeft
-
Centered
-
CenterRight
-
BottomLeft
-
BottomCenter
-
BottomRight
您也可以通过调用 McSdk.CreateMRec(ad-unit-ID, x, y);
.在屏幕的指定(x, y)位置放置一个mrecs广告。位置(0,0)相当于TopLeft;要在Unity的屏幕大小和Android中使用的大小之间进行转换,请使用以下代码:
var density = McSdkUtils.GetScreenDensity();
var dp = pixels / density;
隐藏和展示
调用 ShowMRec()
展示广告
McSdk.ShowMRec(mrecAdUnitId);
调用 HideMRec()
隐藏广告
McSdk.HideMRec(mrecAdUnitId);
销毁
在您不再需要使用banner时(例如,当用户付费去广告),调用 DestroyMRec()
方法释放资源。当您正在使用多个相同Ad Unit ID的banner示例时,不要调用 DestroyMRec()
McSdk.DestroyMRec(mrecAdUnitId);
停止和开启自动刷新
MCSDK不支持MREC广告的自动刷新。建议开发人员在MRECs广告显示后的一段时间后调用以下代码,重新启动加载。如果不重新加载,MREC将始终显示某个聚合平台的广告。
注意:
- 建议关闭聚合SDK的自动刷新功能,手动调用McSdk.LoadMRec() 以一定的间隔重新加载横幅。
- 以下启用和停止自动刷新的方法仅对Max的adUnitId有效,对Taku的广告无效。如果Taku需要启用自动刷新,请在Taku后台进行设置(Taku后台-高级设置-自动刷新)
在某些情况下,您可能希望停止自动刷新,例如,如果您希望手动刷新横幅广告。要停止横幅广告的自动刷新,请使用以下代码:
McSdk.StopMRecAutoRefresh(mrecAdUnitId);
使用以下代码启动MREC广告的自动刷新:
McSdk.StartMRecAutoRefresh(mrecAdUnitId);
9. 广告测试
打开 MCSDK 的日志
McSdk.SetVerboseLogging(true);
在 Android Studio 的 Logcat中,您可以通过此TAG查看相关日志: mcsdk|Unity
初始化MCSDK后,可以选择调用以下代码分别打开Max或Taku聚合的调试工具
Max Mediation Debugger:
McSdk.ShowMediationDebugger(McSdkBase.MediationId.Max);
更多信息请参考: Max Mediation Debugger
Taku Mediation Debugger:
McSdk.ShowMediationDebugger(McSdkBase.MediationId.Taku);
更多信息请参考: Taku Mediation Debugger
10. 错误处理
如果广告加载失败或展示失败,您的广告监听器将收到回调。此回调将返回一个错误对象。下面介绍了您可能看到的错误代码。
MCSDK 错误对象
您在回调中收到的错误是实现 ErrorInfo
的一级错误对象。此对象具有以下API:
- Code - 错误码,见下表
- Message - 错误信息
- MediationErrors - 每个聚合平台的错误信息. 每个聚合平台的错误信息可通过 MediationErrorInfo 获取
MediationErrorInfo 对象
- MediationId - 用于区分不同聚合平台,如 Max 和 Taku
- Code - 聚合平台的错误码
- Message - 聚合平台的错误信息
- MediatedNetworkErrorCode - 广告平台的错误码
- MediatedNetworkErrorMessage - 广告平台的错误信息
- WaterfallInfo - (只有Max) 允许您查看已加载或加载失败的广告的当前瀑布流的信息。network responses提供了瀑布流中的每个广告的广告加载状态、耗时、凭证和广告平台信息。如果瀑布流中的广告无法加载,则network responses会提供错误信息。你可以在 这里 找到更多关于这个API的信息
MCSDK 错误码
Code
|
Enum
|
Description
|
Load / Display
|
---|---|---|---|
−1
|
McSdkBase.ErrorCode.Unspecified
|
系统处于意外状态。此错误代码表示无法归类为其他已定义错误之一的错误。有关详细信息,请参阅错误对象中的字段。
|
L/D
|
-5202
|
McSdkBase.ErrorCode.InvalidConfiguration
|
传递给sdk的参数无效,需要进行检查。
|
L
|
−5001
|
McSdkBase.ErrorCode.AdLoadFailed
|
由于没有广告平台可以填充,所有广告加载失败。有关更多详细信息,请参阅错误对象中的adLoadFailureInfo字段。
|
L
|
−5601
|
McSdkBase.ErrorCode.NoActivity
|
SDK未能加载广告,因为找不到Activity
|
L
|
不同聚合平台的错误说明
11. 隐私
11.1 GDPR
如果用户同意基于兴趣的广告,请通过调用SetHasUserConsent将用户同意标志设置为true,并开始通过MCSDK请求广告。在您将特定用户的同意值设置为true后,MCSDK将在您的应用程序生命周期内继续遵循该值,或者直到用户撤销对基于兴趣的广告的同意。
McSdk.SetHasUserConsent(true);
如果用户不同意基于兴趣的广告,请通过调用特定用户的SetHasUserConsent将用户同意标志设置为false,并开始通过MCSDK请求广告。在您将同意值设置为false后,MCSDK将在您的应用程序的整个生命周期内继续遵循该值,或者直到用户同意基于兴趣的广告。
McSdk.SetHasUserConsent(false);
11.2 COPPA
注:以下API对topon无效。对于topon,请转到 应用 页面,然后单击“编辑”按钮进行设置
如果您知道用户属于年龄限制类别(即16岁以下,或适用法律另有定义),则必须将年龄限制用户标志设置为true。
McSdk.SetIsAgeRestrictedUser(true);
如果您知道用户不属于年龄限制类别(即16岁或以上,或适用法律另有定义),则必须将年龄限制用户标志设置为false。
McSdk.SetIsAgeRestrictedUser(false);
11.3 CCPA
注:以下API对topon无效。对于topon,请转到 应用 页面,然后单击“编辑”按钮进行设置
美国加州法律可能要求您显示“请勿出售或共享我的个人信息”链接,或向位于这些州的用户提供其他选项,以选择退出基于兴趣的广告。您必须设置一个标志,指示相关州的用户是否选择退出基于兴趣的广告,或出售或共享个人信息进行基于兴趣的宣传。
如果用户没有以这些方式选择退出,请将“请勿出售”标志设置为false。
McSdk.SetDoNotSell(false);
如果用户确实以这些方式选择退出,请将“请勿出售”标志设置为true。
McSdk.SetDoNotSell(true);
12. 展示级别用户收入API
以下示例显示了如何在“OnAdRevenuePaidEvent”回调中执行操作:
// Attach callbacks based on the ad format(s) you are using
McSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
McSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
McSdkCallbacks.AppOpen.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
McSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
McSdkCallbacks.MRec.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
⋮
private void OnAdRevenuePaidEvent(string adUnitId, McSdkBase.AdInfo adInfo)
{
double revenue = adInfo.Revenue;
// Miscellaneous data
MediationId mediationId = adInfo.MediationId; // The mediation ID that showed the ad (1: "Taku", 2: "Max")
string mediationPlacementId= adInfo.MediationPlacementId; // The placement ID from the mediation that showed the ad
string countryCode = adInfo.Country; // "US" for the United States, etc - Note: Do not confuse this with currency code which is "USD"
string networkName = adInfo.NetworkName; // Display name of the network that showed the ad (e.g. "AdColony")
string adUnitIdentifier = adInfo.AdUnitIdentifier; // The MAX Ad Unit ID - This only indicates that the current ad was loaded using this ad placement, and does not represent the ad placement of the mediation
string placement = adInfo.Placement; // The placement this ad's postbacks are tied to
string networkPlacement = adInfo.NetworkPlacement; // The placement ID from the network that showed the ad
}
您还可以获取收入值的精度,如以下示例所示:
string revenuePrecision = adInfo.RevenuePrecision;
精度的枚举如下:
-
publisher_defined
— 开发者定义在后台的固定价格 -
exact
— 实时竞价返回的价格 -
estimated
— 基于Auto CPM或FB Bidding的预估价格 -
undefined
— 没有定义收入金额,也没有足够的数据来预估 -
空字符串,如果收入和精度无效(例如,在测试模式下)