shlu's note

某免费视频软件AD机制分析

前言

最近发现一个不错得免费视频软件,资源很丰富,网速也很快,连奈飞都不用开了,唯一缺点,就是AD有点多,影响观看体验,今天我们就来看看它的AD机制

具体分析

第一处AD

//AppApplication
GDTAdSdk.init()

第二处

//AppApplication
ZjSdk.init()

新版本换成了SjmSdk.init,所以为了防止以后频繁更新,需要去拦截上层函数才行

第三处

//AppApplication
MQSDK.getInstance().initSdk();

第四处

接下来是终身免AD特权

MineUserInfo.getIs_vip()

去除更新

UpdateEvent$UpdateData.getVersion()

默认关闭弹幕

master.flame.danmaku.ui.widget.DanmakuView.start()
VideoPlayDetailActivity.initBarrage()

去掉推广Tab按钮

MainActivity.initData(){
//arrayList.add(new TabLayout.b(2131231947, 2131820825, 2131231943, -1, ExtensionShareFragment.class, 4));
}

启动屏不再跳转第二AD屏,直接进入主界面

//SplashActivity
public /* synthetic */ void lambda$initViewObservable$2$SplashActivity(AdInfoEntry adInfoEntry) {
        this.delayedTime = true;
        if (au.H() == 0) {//这里永远为true即可
            au.q(1);
            this.handler.postDelayed(new Runnable() { // from class: com.ys.resemble.ui.login.splash.SplashActivity.2
                @Override // java.lang.Runnable
                public void run() {
                    SplashActivity.this.goToMain();
                }
            }, 500L);
        } 
        //省略.....
    }

从后台打开APP后,不再跳转到AD屏

public static void c(MainActivity mainActivity, AdInfoDetailEntry adInfoDetailEntry) {
        Bundle bundle = new Bundle();
        bundle.putSerializable("adInfoDetailEntry", adInfoDetailEntry);
        bundle.putBoolean("flag", true);
        //mainActivity.startActivity(SplashSecondAdActivity.class, bundle);
    }

禁止检测TV模式

    public static boolean o(Context context) {//isTV
        return ((UiModeManager) context.getSystemService("uimode")).getCurrentModeType() == 4;
    }
    public static boolean c(Context context) {//isTv
        return m(context) == 4;
    }

    private static int m(Context context) {
        UiModeManager uiModeManager = (UiModeManager) context.getSystemService("uimode");
        if (f567a || uiModeManager != null) {
            Log.d("getUiMode", uiModeManager.getCurrentModeType() + "");
            return uiModeManager.getCurrentModeType();
        }
        throw new AssertionError();
    }

盗版检测和重启提示去除

绕过两个if判断,直接gotoau.b("")代码处,让key调用d()函数,随机生成。而au.b("")就是设置user_token的地方,具体代码如下: 在这里插入图片描述 这里直接置空,上面的g()函数是在Application的onCreate里调用的,也就是在每次启动APP后都会重置设备信息,而不会再出现盗版检测,当然把这些处理完后,依然会有盗版检测,经过排查是Build.MODEL的问题,解决方案如下:

权限请求对话框可以取消

在这里插入图片描述 把false换成true即可,实在嫌频繁弹框的,可以直接注释show()函数即可

滑动验证问题

打开视频播放界面会弹出一个滑动验证界面,经研究是频繁重置deviceId所致,但传回的视频信息除了视频链接不同,其它信息都相同,所以只能根据视频本身信息来判断,目前解决方案是获取视频的长度,若是视频太小,则被认定是出现了盗版检测视频,这时重置deviceId即可

声明:转载请注明出处,原文地址:shlu's note