混合开发之解决H5页面出现广告的问题

  公司采用了H5和Android混合开发,以原生代码为壳,H5代码编写逻辑的方式做产品。笔者之前写过一篇文章简单聊到了这种方式,有兴趣的朋友可以了解一下,顺便点个赞。Android原生与H5通信   而在这种方式的使用过程中笔者碰到了一个问题,偶然性的会出现广告,各种各样的广告。并且不是必然触发。   通过查询各种资料(其实就是百度)。发现问题应该只会出现在以下三种情况内:

  1. DNS被劫持
  2. 第三方包带广告
  3. Http被劫持

什么是DNS被劫持:

  DNS是在作为域名www.baidu.com和IP地址(192.168.1.1)相互映射的一个分布式数据库,就是我们的浏览器,会将域名拿到DNS去解析出ip地址来访问,DNS劫持是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能反应或访问的是假网址。   通俗讲,DNS帮我们指向了另一个地址,或者让我无法访问。

什么是HTTP劫持:

  HTTP劫持是在使用者与其目的网络服务所建立的专用数据通道中,监视特定数据信息,提示当满足设定的条件时,就会在正常的数据流中插入精心设计的网络数据报文,目的是让用户端程序解释“错误”的数据,并以弹出新窗口的形式在使用者界面展示宣传性广告或者直接显示某网站的内容。   通俗讲,你要去别人家的首页,他会给你别人家的首页,但却在别人家首页某个部位加个小广告,还可以控制关掉。。 让人无奈。现在很多免费WIFI植入广告的手段,为了博取更多点击量。

问题排查:

  由于笔者在很多地方的wifi甚至4G网都出现了广告,所以可以直接排除DNS被劫持的问题。而广告页只会在H5的页面出现,所以基本可以排除第三方包带广告的问题,所以问题基本可以确定是Http被劫持了。   网上几乎所有文章的解决方案都是使用Https替换Http。笔者感觉此方法可行,简单讲Https就是Http的安全版。不过由于公司原因,暂时没有Https通道,所以短时间没法替换。   通过查看Android原生WebView的拦截日志,发现了广告页面的地址是会被拦截到的,而我们自己的H5页面放在自己的服务器上,IP和端口号是固定的当前使用服务器的ip和端口,广告页的ip和端口肯定和我们是不一致的,从这里入手。笔者拦截了url,将广告url拦截并且不允许它继续执行打开,至此,从用户的角度算是完全解决了广告的问题。

拦截代码:

webView.setWebViewClient(new WebViewClient() {
            // Load opened URL in the application instead of standard browser
            // application
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                showLogInfo("拦截到的url----"+url);
                String advertising="http://"+sharedPreferencesUtil.getData(Constant.IP, RequestConfig.IP)
                        +":"+sharedPreferencesUtil.getData(Constant.PORT,RequestConfig.IPPORT);
                if (url.contains(pre)) {
                    Map<String, String> map = getParamsMap(url, pre);
                    String code = map.get("code");
                    String data = map.get("data");
                    parseCode(code, data);
                    return true;
                }else if(!url.contains(advertising)){
                    showLogError("拦截到植入广告,广告的url——"+url);
                    return true;
                } else{
                    return false;
                }
            }
        });

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码神联盟

碎片化 | 第四阶段-36-struts-spring结合jdbc实现删除功能-视频

如清晰度低,可转PC网页观看高清版本: http://v.qq.com/x/page/z05669dznu6.html ---- 结合jdbc实现删除功能(...

3589
来自专栏bboysoul

webmap搭建使用

webmap是一个使用django写的nmap的web控制面板,我觉得这东西没什么屌用就是很炫,唯一牛逼的东西就是可以把扫描结果导出成pdf还有计划任务扫描的功...

982
来自专栏前端笔记

【腾讯云 Web 漏洞扫描】为您提供全面准确的漏洞监测和专业的修复建议!

3003
来自专栏企鹅号快讯

使用Jest测试原生TypeScript项目

问题:我怎么才能收到你们公众号平台的推送文章呢? 最近写了一个wechat-colorpicker小项目。 主要是为了练习下TS。既然写了一个小库,我就想着顺便...

4066
来自专栏即时通讯技术

开源轻量级IM框架MobileIMSDK v3.0发布!

本次更新为主版本更新,更新内容包含了简化了消息发送目标的方式、支持Web版与APP版互通、优化了Protocal协议结构等主要升级,详细更新内容见“版本更新说明...

2851
来自专栏赵伟成的专栏

【腾讯云的1001种玩法】如何利用腾讯云搭建分布式应用

之前有个zip包忘记密码了,网上搜的一些暴力破解的软件,要么收费,要么不好用,最关键的是,速度太慢,于是自己决定开发一个分布式的密码破解软件。

1.4K0
来自专栏杨建荣的学习笔记

Data Guard中快速Switchover,Failover的一些建议(r9笔记第29天)

其实对于Failover和Switchover是大家处理灾难时很头疼的一个环节,也是最关键的处理过程。 假设你半夜正在睡觉,被报警电话惊醒,得知某个服务器产生了...

3495
来自专栏知晓程序

已发布的个人小程序,终于可以改名了!

在小程序开放个人注册时,知晓程序(微信号 zxcx0101)提到过,个人类型小程序在发布之前,有三次更名机会。发布之后,「小程序暂不支持改名」。

1911
来自专栏FreeBuf

深入解析Cookie技术

0×00 引言 在Web技术的发展史上,Cookie技术的出现是一次重大的 变革。但是, Cookie技术又是一项非常有争议的技术,从它诞生之日起就成了广大网络...

21910
来自专栏Android 开发者

针对现代 Android 更新游戏 API 等级

我们已在去年宣布:自 2018 年 8 月起, Google Play 要求所有新上线的应用和游戏都必须针对新的 Android API 等级进行开发 —— ...

1903

扫码关注云+社区

领取腾讯云代金券