激励视频广告
在 Android 应用中集成 CloudX 激励视频广告
激励视频广告在用户观看全屏广告后给予奖励,通常为应用内货币或额外内容。
CloudX 渲染的素材
CloudX 下发的素材由内置渲染器渲染,渲染器已内置于核心 SDK,无需单独的渲染器适配器模块。素材类型根据出价响应自动选择,发布者无需额外集成即可渲染任一格式。渲染器在各广告格式中支持 MRAID 3.0(HTML)和 VAST 素材:
| 广告格式 | HTML(MRAID 3.0) | VAST |
|---|---|---|
| Banner | ✓ | — |
| MREC | ✓ | — |
| Interstitial | ✓ | ✓ |
| Rewarded | ✓ | ✓ |
class MainActivity : AppCompatActivity(), CloudXRewardedListener, CloudXAdRevenueListener {
private lateinit var rewardedAd: CloudXRewardedAd
private var retryAttempt = 0
private fun createRewardedAd() {
rewardedAd = CloudX.createRewarded(this, "your-rewarded-ad-unit-id")
rewardedAd.listener = this
rewardedAd.revenueListener = this
rewardedAd.load()
}
private fun showRewardedAd() {
if (rewardedAd.isAdReady) {
// 基本展示
rewardedAd.show(this)
// 或带有可选的广告位和自定义数据用于跟踪
// rewardedAd.show(this, "bonus_coins", "level:5,coins:100")
} else {
Log.w("CloudX", "激励视频广告尚未准备好")
}
}
// CloudXRewardedListener 回调
override fun onAdLoaded(cloudXAd: CloudXAd) {
Log.d("CloudX", "激励视频广告已加载,来自 ${cloudXAd.networkName}")
retryAttempt = 0
}
/**
* Retries loading with exponential backoff: delay doubles with each attempt
* (2s → 4s → 8s … 32s max) to avoid hammering the server during transient
* failures. [retryAttempt] resets to 0 in [onAdLoaded].
*/
override fun onAdLoadFailed(adUnitId: String, cloudXError: CloudXError) {
Log.e("CloudX", "激励视频广告加载失败: ${cloudXError.message}")
retryAttempt++
val delayMillis = TimeUnit.SECONDS.toMillis(2.0.pow(retryAttempt.coerceAtMost(5)).toLong())
Handler(Looper.getMainLooper()).postDelayed({ rewardedAd.load() }, delayMillis)
}
override fun onAdDisplayed(cloudXAd: CloudXAd) {
Log.d("CloudX", "激励视频广告已展示")
}
override fun onAdDisplayFailed(cloudXAd: CloudXAd, cloudXError: CloudXError) {
Log.e("CloudX", "激励视频广告展示失败: ${cloudXError.message}")
rewardedAd.load()
}
override fun onAdHidden(cloudXAd: CloudXAd) {
Log.d("CloudX", "激励视频广告已隐藏")
// 为下次使用重新加载
rewardedAd.load()
}
override fun onAdClicked(cloudXAd: CloudXAd) {
Log.d("CloudX", "激励视频广告被点击")
}
override fun onUserRewarded(cloudXAd: CloudXAd, reward: CloudXReward) {
Log.d("CloudX", "用户获得奖励: ${reward.amount} ${reward.label}")
// 为用户发放奖励
}
// CloudXAdRevenueListener 回调
override fun onAdRevenuePaid(cloudXAd: CloudXAd) {
Log.d("CloudX", "激励视频竞价时收入: ${cloudXAd.revenue},来自 ${cloudXAd.networkName}")
}
override fun onDestroy() {
super.onDestroy()
rewardedAd.destroy()
}
}public class MainActivity extends AppCompatActivity implements CloudXRewardedListener, CloudXAdRevenueListener {
private CloudXRewardedAd rewardedAd;
private int retryAttempt;
private void createRewardedAd() {
rewardedAd = CloudX.createRewarded(this, "your-rewarded-ad-unit-id");
rewardedAd.setListener(this);
rewardedAd.setRevenueListener(this);
rewardedAd.load();
}
private void showRewardedAd() {
if (rewardedAd.isAdReady()) {
// 基本展示
rewardedAd.show(this);
// 或带有可选的广告位和自定义数据用于跟踪
// rewardedAd.show(this, "bonus_coins", "level:5,coins:100");
} else {
Log.w("CloudX", "激励视频广告尚未准备好");
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (rewardedAd != null) {
rewardedAd.destroy();
}
}
// CloudXRewardedListener 回调
@Override
public void onAdLoaded(@NonNull CloudXAd cloudXAd) {
Log.d("CloudX", "激励视频广告已加载,来自 " + cloudXAd.getNetworkName());
retryAttempt = 0;
}
@Override
public void onAdLoadFailed(@NonNull String adUnitId, @NonNull CloudXError cloudXError) {
Log.e("CloudX", "激励视频广告加载失败: " + cloudXError.getMessage());
retryAttempt++;
long delayMillis = TimeUnit.SECONDS.toMillis((long) Math.pow(2, Math.min(5, retryAttempt)));
new Handler(Looper.getMainLooper()).postDelayed(() -> rewardedAd.load(), delayMillis);
}
@Override
public void onAdDisplayed(@NonNull CloudXAd cloudXAd) {
Log.d("CloudX", "激励视频广告已展示");
}
@Override
public void onAdDisplayFailed(@NonNull CloudXAd cloudXAd, @NonNull CloudXError cloudXError) {
Log.e("CloudX", "激励视频广告展示失败: " + cloudXError.getMessage());
rewardedAd.load();
}
@Override
public void onAdHidden(@NonNull CloudXAd cloudXAd) {
Log.d("CloudX", "激励视频广告已隐藏");
// 为下次使用重新加载
rewardedAd.load();
}
@Override
public void onAdClicked(@NonNull CloudXAd cloudXAd) {
Log.d("CloudX", "激励视频广告被点击");
}
@Override
public void onUserRewarded(@NonNull CloudXAd cloudXAd, @NonNull CloudXReward reward) {
Log.d("CloudX", "用户获得奖励: " + reward.getAmount() + " " + reward.getLabel());
// 为用户发放奖励
}
// CloudXAdRevenueListener 回调
@Override
public void onAdRevenuePaid(@NonNull CloudXAd cloudXAd) {
Log.d("CloudX", "激励视频竞价时收入: " + cloudXAd.getRevenue() + ",来自 " + cloudXAd.getNetworkName());
}
}