1.小功能
这期的产品安卓新版本要上一个小功能,就是在已经安装J应用的手机上,点击广告能够跳转打开该J应用。
2.测试
作为QA思考了下这个测试应该不会很麻烦,因为只是配置广告跳转链接(该链接是J应用提供的合作广告地址),然后点击广告看是否能启动J应用即可。
也就是主要的测试点为:
新版本,手机已安装J应用,点击广告跳转;
新版本,手机未安装J应用,点击广告跳转;
老版本,点击广告跳转。(后台未做版本控制,新老版本返回相同广告数据)
因为我们的产品有许多广告位置,是否每个广告位置都要配置一遍看一下呢。不太确定,今天开发请假了,来看下代码确认下实现逻辑吧。看这部分逻辑是实现在广告处理部分还是统一的webview部分。
3.代码实现
拿到开发GG的代码,可以看到是在Webview部分做了统一处理。长舒一口气,可以不用配置所有的广告位置广告了。
核心代码非常简单:
if (url.startsWith("ourschemeurl://")) {
try {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri uri = Uri.parse(url);
intent.setData(uri);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
在shouldOverrideUrlLoading()拦截回调URL方法里增加了一个对J应用scheme的判断,只要符合J应用的schemeUrl,就调起J应用。
所以我们之前列的测试点是ok的。
4.疑惑:为什么抓包没有看到scheme
我用老版本配置了相同的广告,点击广告跳转抓包一直没有看到相关scheme发出,疑惑这样客户端是如何拦截到这个scheme,然后处理的呢?
其实scheme并不是一种http请求,所以用fiddler等抓包工具是抓不到的,这时候如果看安卓日志的话,在日志中是可以看到url中带的scheme信息的。
5.查漏补缺:关于webview和调起第三方app
安卓的webview:
参考文章:http://www.jianshu.com/p/3c94ae673e2a
http://blog.csdn.net/carson_ho/article/details/64904691
调起第三方app:
参考文章:http://www.jb51.net/article/64819.htm
三种方法概括:通过包名、自定义action、scheme(我们实现就是第三种方法)
(有个疑问,为什么可以通过scheme调起第三方app呢?其实每个app都可以设置自己的scheme供他人来调起,可参考文章http://www.jianshu.com/p/45af72036e58)
使用浏览器打开第三方app:
参考文章:http://www.jianshu.com/p/1cd02fe1810f
6.小结
看代码实现对于测试还是蛮重要的,可以看别人的代码了解问题的实现方式,进而思考这种实现方式可能存在的问题,同时也避免掉一些无意义的测试点,使得测试更精准,更高效。
另外,一个困扰自己超过1个小时的问题有必要整理下来,这篇小文章不过用了20分钟整理,但是积累多了不也是宝贵的财富咩。