让那些烦人的广告,滚出我们的APP!

1-现像

最近越来越多的用户向客服反映,在使用我们的App过程中,会莫名其妙的在底部出现广告,甚至黄色信息。这些信息不但困扰了用户,影响用户的使用,最关键是使得用户散失对我们公司的信任,觉得我们公司的开发技术不行(什么???什么?技术不行??出来,出来,我要和你大战三百回合、)。那么这个时候不仅仅是要给用户一个合理的解释,查出现象的原因,杜绝现象的再发生就显得迫不及待了。

2-原因

当时接到用户反馈,我们第一时间对现象发生的原因进行了一系列猜想:
1.是不是我们项目中的第三方jar非官方版本,被植入了一些广告代码
2.dns劫持
3.http劫持
做技术的都明白,那就是经验有的时候是助力,也是阻力。很多时候我们会被我们的经验所羁绊。很多资深技术,看到第一条的现象很容易冒出脑海的肯定是:劫持。
那么第一条的理由是不是可能导致这种现象,从实现来说,完全可以做到的。现在很多开发人员平常开发过程随意之极,频繁的在项目使用一些小众且不规范的第三方jar包。而这些第三方jar也会是一些广告的来源。甚至是安全隐患的来源。
另一方面我们根据我们的猜想对用户及时进行了回访,以便验证我们的猜想的正确性。
1.用的是4g还是wifi?
2.如果是wifi,是不是路边免费的wifi?
3.在什么页面出现?(方便定位是h5页面还是原生界面,对大部分用户,千万不要问他是h5还是原生,只能自己分析,如果原生界面也出现那么第三方jar出现问题的概率很大,如果只是h5界面,那么劫持的可能性很大)
4.使用的是android 还是ios客户端
综合用户的答案,我们总结如下:
1.4g,wifi都出现了。
2.出现的位置都是h5页面。
3.android ios都出现了

3-排查

那基本可以定位是网络劫持原因。那么网络劫持有2种
1.dns劫持
2.http劫持
什么是DNS劫持:
首先DNS是什么。在因特网中,机器相互识别靠的是ip,而ip单纯的无意义数字的结合,很难被人类熟记,所以产生了域名,例如www.baidu.com 就是域名。那么问题来了,我们输入域名,机器又不认识,那么机器怎么去访问?那么就轮到DNS出场了,DNS在作为域名和IP地址相互映射的一个分布式数据库,就是我们的浏览器,会将域名拿到DNS去解析出ip地址来访问,DNS劫持是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能反应或访问的是假网址。
通俗来说,就是他给我们指向了另一个地址,或者让我们无法访问。电信以前的互联星空的,每次联网打开的第一个网页永远是互联星空。就是典型的DNS劫持。
什么是http劫持:
百度百科的说法:HTTP劫持是在使用者与其目的网络服务所建立的专用数据通道中,监视特定数据信息,提示当满足设定的条件时,就会在正常的数据流中插入精心设计的网络数据报文,目的是让用户端程序解释“错误”的数据,并以弹出新窗口的形式在使用者界面展示宣传性广告或者直接显示某网站的内容。
通俗来说,你要去百度的首页,他会给你百度首页,然后再百度首页的某个部位+个广告。 更具欺骗性,危害更大。(毕竟直接给你导向另外一个网址,用户也不是傻逼,上当的可能性很小。)而这也是现在很多免费wifi植入广告的手段,因为这样能更多的点击。

而很明显,我们遇到的是第二种

4-解决方案

原因定位之后,就是制定解决方案了。根据这个http劫持的特性,我们可以很简单的给出解决方案:
https。https是以安全为目标的HTTP通道,简单讲是HTTP的安全版。就是说数据交流是加密的那么所谓的在返回数据里面加点广告就无从谈起了。而且https也能解决dns劫持(基本杜绝)。而https的成本并不高。连某些黄色网站都开始用https。(我擦,不要问我网址)
当时由于距离发版本时间不足2天,而申请https证书要3-4天,那么我们需要一个临时解决方案。那么怎么解决呢。
既然这些猥琐的劫持者通过插入一段js,那么不让他执行这段js就好了。
因为android3.0以后webview提供了方法可以方便的拦截到所有的ajax请求,那么所有的js,图片下载都可以拦截到。我们可以做个区分,对要执行的js做一个筛选。

从API 11开始引入,API 21弃用
@Override
        public WebResourceResponse shouldInterceptRequest(WebView view, String url) {

            return Tool.getResponse(WebViewActivity.this,url,control);
        }
从API 21开始引入
        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, final WebResourceRequest request) {

            return  Tool.getResponse(WebViewActivity.this,request.getUrl().toString(),control);
        }
webview在WebViewClient里提供的2种拦截ajax请求的方法

所有我们做了白名单和黑名单的机制,因为现在hybird的开发流行,app嵌入了很多h5,而h5页面的制作也参杂了很多第三方的jar,如果只是单纯的把公司域名下的请求之外的请求拦截,很容易导致h5的某些功能无法使用,所有我们采用了拦截开关的机制。在前2天上报非白名单的url,方便我们派出一些误伤的url,这样加入到白名单,以后开启拦截的开关,就能做到无误伤。(https才是正统的解决方案,拦截请求的局限性太大,而且很容易导致功能误伤)。
然后我拿着我开启了拦截开关的app,上了上海的8号线,连上了花生免费wifi,果然---广告都不见了。
贴一些代码。这边一定要注意,拦截的话一定不能返回null,返回null的话,webview回去正常加载

从API 11开始引入,API 21弃用
@Override
        public WebResourceResponse shouldInterceptRequest(WebView view, String url) {

return new WebResourceResponse("text/html", "UTF-8", new InputStream() {
                            @Override
                            public int read() throws IOException {
                                return -1;
                            }
                        });
        }
从API 21开始引入
        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, final WebResourceRequest request) {

            return new WebResourceResponse("text/html", "UTF-8", new InputStream() {
                            @Override
                            public int read() throws IOException {
                                return -1;
                            }
                        });
        }

5-拓展

中国的网络大环境,http劫持广告很难从源头杜绝。随着越来越多的app嵌入h5,会有越来越多的人在手机端遇到这种劫持广告,作为开发者,一定不要觉得说,这是用户使用免费wifi的原因或者这是运营商的植入广告。我们有的时候改变不了大环境,那么我们做出更多的努力,在app端让劫持广告更难成功。

    码农的路上,纵情向前!
  • 10
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
高仿IOS:从底部弹出的Dialog,拓展性比较高使用方法IosBottomDialog.Builder builder = new IosBottomDialog.Builder(context); //1个标题+2个操作 builder.setTitle("标题",Color.RED)     .addOption("操作1",Color.DKGRAY,new IosBottomDialog.OnOptionClickListener(){         @Override         public void onOptionClick(){             ToastUtils.show("操作1");         }     })     .addOption("操作2",Color.DKGRAY,new IosBottomDialog.OnOptionClickListener(){         @Override         public void onOptionClick(){             ToastUtils.show("操作2");         }     }).create().show();"淘宝头条-京东头条"控件使用方法List<HeadlineBean> data = new ArrayList(); data.add(new HeadlineBean("热门", "袜子裤子只要998~只要998~")); data.add(new HeadlineBean("推荐", "秋冬上心,韩流服饰,一折起")); data.add(new HeadlineBean("好货", "品牌二手车")); data.add(new HeadlineBean("省钱", "MadCatz MMO7 游戏鼠标键盘套装")); taobaoHeadline = (TaobaoHeadline) view.findViewById(R.id.fragment_taobao_headline_headline); taobaoHeadline.setData(data); taobaoHeadline.setHeadlineClickListener(new TaobaoHeadline.HeadlineClickListener() {     @Override     public void onHeadlineClick(HeadlineBean bean) {         ToastUtils.show(bean.getTitle()   ":"   bean.getContent());     }     @Override     public void onMoreClick() {         ToastUtils.show("更多");     } });广告倒计时View使用方法_布局文件中使用_ _代码中使用_ countDownView.start(); countDownView.setCountDownTimerListener(new CountDownView.CountDownTimerListener() {     @Override     public void onStartCount() {         ToastUtils.show("开始了");     }     @Override     public void onFinishCount() {         ToastUtils.show("结束了");     } });
### 回答1: 看广告做任务app源码是指可以通过阅读或观看广告完成一些任务从而获得奖励的移动应用程序的源代码。 这类应用程序通常是为了提供一种方式,让用户能够在空闲时间内赚取一些额外的奖励或金钱。用户可以根据自己的兴趣和时间安排选择完成不同类型的任务,比如下载其他应用程序、回答问卷调查、观看和分享广告等等。 看广告做任务app源码的开发需要具备一定的移动应用程序开发技术和广告合作渠道。在开发过程中,需要编写代码实现任务的展示和奖励的计算,同时也需要与广告合作方进行接口对接,以保障任务的有效性和奖励的发放。 此外,为了吸引用户和增加用户的黏性,看广告做任务app源码开发者还可以考虑添加一些社交功能、排行榜、积分兑换等等。这些功能可以提高用户参与度和用户满意度,从而提升应用程序的活跃度和用户留存率。 总而言之,看广告做任务app源码是一种能够帮助用户在空闲时间内赚取额外奖励的移动应用。它需要开发者具备移动应用开发和广告合作的技术能力,同时也需要考虑用户体验和应用功能的完善,以吸引更多用户参与。 ### 回答2: 看广告做任务app是一款非常受欢迎的应用程序,它提供了一种通过观看广告来完成任务并赚取奖励的方式。这类应用程序通常提供了各种任务,如看视频、下载应用程序、参与调查等,用户可以选择自己感兴趣的任务并按照要求完成。完成任务后,用户将获得一定的奖励,例如积分、礼品卡或现金等形式。 看广告做任务app的源码包含了应用程序的开发代码,它可以让开发者基于已有的框架进行二次开发和定制,以满足自己的需求。通过使用源码,开发者可以添加自己的广告合作伙伴,调整任务的种类和难度等,从而提高用户的参与度和用户粘性。 看广告做任务app的源码通常包括以下几个功能模块: 1. 任务管理:包括任务的创建、编辑和删除等功能,开发者可以在后台设置任务的类型、奖励方式和触发条件等。 2. 用户管理:包括用户注册、登录、积分管理和奖励发放等功能,开发者可以在后台查看用户的活跃度和参与情况。 3. 广告管理:包括广告合作伙伴的接入和广告展示的管理等,开发者可以根据自己的需求选择合适的广告平台和展示方式。 4. 统计报表:包括任务完成情况、用户活跃度和广告收益等数据的统计和报表生成,开发者可以通过这些数据进行业务分析和优化。 总结来说,看广告做任务app源码提供了一种快速开发类似应用的方法,使开发者能够根据自己的需求进行二次开发,为用户提供更好的体验,并在广告收益等方面获得更多的收益。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值