1.小功能
這期的產(chǎn)品安卓新版本要上一個小功能,就是在已經(jīng)安裝J應(yīng)用的手機(jī)上,點擊廣告能夠跳轉(zhuǎn)打開該J應(yīng)用。
2.測試
作為QA思考了下這個測試應(yīng)該不會很麻煩,因為只是配置廣告跳轉(zhuǎn)鏈接(該鏈接是J應(yīng)用提供的合作廣告地址),然后點擊廣告看是否能啟動J應(yīng)用即可。
也就是主要的測試點為:
新版本,手機(jī)已安裝J應(yīng)用,點擊廣告跳轉(zhuǎn);
新版本,手機(jī)未安裝J應(yīng)用,點擊廣告跳轉(zhuǎn);
老版本,點擊廣告跳轉(zhuǎn)。(后臺未做版本控制,新老版本返回相同廣告數(shù)據(jù))
因為我們的產(chǎn)品有許多廣告位置,是否每個廣告位置都要配置一遍看一下呢。不太確定,今天開發(fā)請假了,來看下代碼確認(rèn)下實現(xiàn)邏輯吧??催@部分邏輯是實現(xiàn)在廣告處理部分還是統(tǒng)一的webview部分。
3.代碼實現(xiàn)
拿到開發(fā)GG的代碼,可以看到是在Webview部分做了統(tǒng)一處理。長舒一口氣,可以不用配置所有的廣告位置廣告了。
核心代碼非常簡單:
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()攔截回調(diào)URL方法里增加了一個對J應(yīng)用scheme的判斷,只要符合J應(yīng)用的schemeUrl,就調(diào)起J應(yīng)用。
所以我們之前列的測試點是ok的。
4.疑惑:為什么抓包沒有看到scheme
我用老版本配置了相同的廣告,點擊廣告跳轉(zhuǎn)抓包一直沒有看到相關(guān)scheme發(fā)出,疑惑這樣客戶端是如何攔截到這個scheme,然后處理的呢?
其實scheme并不是一種http請求,所以用fiddler等抓包工具是抓不到的,這時候如果看安卓日志的話,在日志中是可以看到url中帶的scheme信息的。
5.查漏補(bǔ)缺:關(guān)于webview和調(diào)起第三方app
安卓的webview:
參考文章:http://m.itdecent.cn/p/3c94ae673e2a
http://blog.csdn.net/carson_ho/article/details/64904691
調(diào)起第三方app:
參考文章:http://www.jb51.net/article/64819.htm
三種方法概括:通過包名、自定義action、scheme(我們實現(xiàn)就是第三種方法)
(有個疑問,為什么可以通過scheme調(diào)起第三方app呢?其實每個app都可以設(shè)置自己的scheme供他人來調(diào)起,可參考文章http://m.itdecent.cn/p/45af72036e58)
使用瀏覽器打開第三方app:
參考文章:http://m.itdecent.cn/p/1cd02fe1810f
6.小結(jié)
看代碼實現(xiàn)對于測試還是蠻重要的,可以看別人的代碼了解問題的實現(xiàn)方式,進(jìn)而思考這種實現(xiàn)方式可能存在的問題,同時也避免掉一些無意義的測試點,使得測試更精準(zhǔn),更高效。
另外,一個困擾自己超過1個小時的問題有必要整理下來,這篇小文章不過用了20分鐘整理,但是積累多了不也是寶貴的財富咩。