You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现观看激励视频后当前会话移除广告 重启App后恢复展示

实现方案

核心用进程内静态标记位实现会话级免广告控制,不需要做本地持久化,应用重启进程销毁后标记自动重置,刚好满足重启后广告恢复的需求,整体改造分4部分:


具体实现步骤

  • 第一步:定义全局会话免广告标记
    可以在自定义Application类中定义静态布尔变量,全局可访问,进程被杀后自动恢复默认值false,不需要额外写重置逻辑:

    public class MyApp extends Application {
        // 当前会话是否免广告,默认关闭,应用重启后自动重置
        public static boolean isAdFreeForSession = false;
    }
    

    记得在AndroidManifest.xml中配置自定义Application类。如果不想新增Application类,也可以直接在HomeActivity中定义同名静态变量,效果一致。注意不要把这个值存到SharedPreferences、数据库等持久化存储中,否则重启应用标记不会消失。

  • 第二步:改造广告初始化逻辑
    原onCreate中直接加载Banner、插屏广告的逻辑,增加免广告状态判断,免广告状态下直接隐藏Banner、不加载任何广告:

    MobileAds.initialize(this, initializationStatus -> {});
    AdView mAdView = findViewById(R.id.adView);
    if (MyApp.isAdFreeForSession) {
        mAdView.setVisibility(View.GONE);
    } else {
        mAdView.setVisibility(View.VISIBLE);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
        intertitalAd();
    }
    
  • 第三步:改造插屏广告展示逻辑
    现有copy()、share()方法中,所有触发插屏展示、预加载的位置都增加免广告判断,免广告状态下直接执行业务逻辑,不弹广告、不预加载新插屏。以copy()方法为例,改造后代码如下:

    private void copy() {
        // 免广告状态直接执行业务逻辑
        if (MyApp.isAdFreeForSession) {
            startActivity(new Intent(HomeActivity.this, HomeActivity.class));
            doCopyAction();
            return;
        }
        if (mInterstitialAd != null) {
            mInterstitialAd.show(HomeActivity.this);
            mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() {
                @Override
                public void onAdDismissedFullScreenContent() {
                    super.onAdDismissedFullScreenContent();
                    startActivity(new Intent(HomeActivity.this, HomeActivity.class));
                    mInterstitialAd = null;
                    // 非免广告状态才预加载下一个插屏
                    if (!MyApp.isAdFreeForSession) {
                        intertitalAd();
                    }
                    doCopyAction();
                }
            });
        } else {
            startActivity(new Intent(HomeActivity.this, HomeActivity.class));
            doCopyAction();
        }
    }
    
    // 抽离复制业务逻辑,避免重复代码
    private void doCopyAction() {
        ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        ClipData clipData = ClipData.newPlainText("text", quotesTxt.getText());
        if (clipboardManager != null) {
            clipboardManager.setPrimaryClip(clipData);
        }
        Toast.makeText(getApplicationContext(), "Copied", Toast.LENGTH_SHORT).show();
    }
    

    share()方法按照相同逻辑改造即可,把分享业务逻辑抽离成独立方法,所有广告触发、预加载位置都增加免广告状态判断。

  • 第四步:接入激励视频广告,发放免广告权益
    新增激励视频加载、展示逻辑,在你设置的「看视频免广告」入口(比如页面按钮、弹窗按钮)调用展示方法,必须等用户完整看完视频、触发奖励回调后再发放权益,避免用户跳过广告也拿到免广告资格违反平台政策:

    private RewardedAd mRewardedAd;
    
    // 页面初始化时可以提前加载激励视频
    private void loadRewardedAd() {
        AdRequest adRequest = new AdRequest.Builder().build();
        RewardedAd.load(this, "替换为你的激励视频广告位ID", adRequest, new RewardedAdLoadCallback() {
            @Override
            public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
                mRewardedAd = rewardedAd;
            }
    
            @Override
            public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                mRewardedAd = null;
            }
        });
    }
    
    // 点击免广告入口时调用该方法展示激励视频
    private void showRewardedAd() {
        if (mRewardedAd == null) {
            Toast.makeText(this, "广告加载中,请稍后再试", Toast.LENGTH_SHORT).show();
            loadRewardedAd();
            return;
        }
        mRewardedAd.show(this, rewardItem -> {
            // 用户完整看完视频,发放当前会话免广告权益
            MyApp.isAdFreeForSession = true;
            // 隐藏当前页Banner
            if (mAdView != null) {
                mAdView.setVisibility(View.GONE);
            }
            // 清空已加载的插屏,后续不再预加载
            mInterstitialAd = null;
            Toast.makeText(HomeActivity.this, "已获得本次应用使用周期免广告权益", Toast.LENGTH_SHORT).show();
        });
    }
    

注意事项

  • 如果应用包含多个Activity,每个Activity的广告加载、展示逻辑前都要判断全局免广告标记,避免其他页面漏出广告
  • 激励视频的奖励发放逻辑必须写在onUserEarnedReward回调中,用户提前关闭、跳过广告时不发放权益
  • 不要手动做会话结束的重置逻辑,静态变量随应用进程销毁自动恢复默认值,完全匹配重启应用广告恢复的需求

内容的提问来源于stack exchange,提问作者user18105926

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 02:18:14