前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >混合开发之解决H5页面出现广告的问题

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

作者头像
饮水思源为名
发布2018-09-06 13:01:27
2.1K0
发布2018-09-06 13:01:27
举报
文章被收录于专栏:Android小菜鸡Android小菜鸡

公司采用了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拦截并且不允许它继续执行打开,至此,从用户的角度算是完全解决了广告的问题。

拦截代码:

代码语言:javascript
复制
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;
                }
            }
        });
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.08.08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是DNS被劫持:
  • 什么是HTTP劫持:
  • 问题排查:
  • 拦截代码:
相关产品与服务
分布式数据库 TDSQL
分布式数据库(Tencent Distributed SQL,以下简称 TDSQL)是腾讯打造的一款企业级数据库产品,具备强一致高可用、全球部署架构、高 SQL 兼容度、分布式水平扩展、高性能、完整的分布式事务支持、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档