Android與js交互之抽取下載通用接口供網(wǎng)頁調用

需求說明

應用市場經(jīng)常需要搞些活動脖旱,而活動頁一般都是h5頁面堪遂,而一般搞活動的目的都是提升某些app的下載量,這就需要該活動頁支持下載萌庆,而據(jù)我了解溶褪,網(wǎng)頁是不支持下載的,就算網(wǎng)頁支持下載践险,一般需求也是需要調用app的下載模塊來下載猿妈,所以這里就涉及到了android和網(wǎng)頁的交互。

流程分析

  1. 網(wǎng)頁一般需要一些用戶信息巍虫,如用戶的剩余抽獎次數(shù)彭则,累積積分等。如果不通過網(wǎng)頁接入第三方登錄sdk的方式(如微信登錄)來獲取用戶信息的話占遥,那么網(wǎng)頁就只能通過和原生代碼交互的方式來獲取用戶信息了俯抖,因此我們考慮在android端留一個供網(wǎng)頁獲取信息的接口:String getUserInfo();注意,用戶數(shù)據(jù)在傳遞前應先加密瓦胎。

  2. 由于網(wǎng)頁中的app狀態(tài)需要從手機本地獲取芬萍,因此android端需要有一個供網(wǎng)頁注冊獲取app狀態(tài)監(jiān)聽器的接口:registerAppStateChangeListener(包信息);在網(wǎng)頁關閉后需要注銷該網(wǎng)頁所有的監(jiān)聽器。同時網(wǎng)頁端也要提供一個供android端回調狀態(tài)給網(wǎng)頁的接口:updateAppState(包信息);

  3. 網(wǎng)頁中的app按鈕的響應應該交由android端處理:onButtonClick(包信息);

至此搔啊,所有的流程應該都能走通了柬祠。

android端實現(xiàn)

由以上分析可得出android端的實現(xiàn)如下:

  1. 創(chuàng)建js接口并提供以下方法:
@android.webkit.JavascriptInterface
public String getUserInfo() {
    return info;
}

@android.webkit.JavascriptInterface
public void registerAppStateChangeListener(String json) {
    //注冊監(jiān)聽
}

@android.webkit.JavascriptInterface
public void onButtonClick(final String json) {
    //處理點擊邏輯
}

由于下載的邏輯各有不同,因此這里只說一下思路负芋,就不貼相關代碼了漫蛔。首先,網(wǎng)頁加載的過程中可以調用getUserInfo方法獲取用戶信息示罗,這里要注意的是惩猫,只要是涉及到做任務領積分之類的情景,則在上傳用戶信息時最好對用戶信息做一下驗證處理蚜点,以防止惡意刷分的情況出現(xiàn),我的處理思路是這樣:info+salt+sign拌阴,其中sign是把info做一些加密處理得到的绍绘,具體怎么加密是你的自由,網(wǎng)頁驗證的時候只要取出info迟赃,然后根據(jù)定好的規(guī)則生成sign陪拘,再把生成的sign和傳過來的sign比對,一樣的就視為驗證通過纤壁。而剩下的salt就像它的名字一樣左刽,配料而已,用來混淆視聽的啦酌媒。

由于app的狀態(tài)只能通過android端來調用網(wǎng)頁端的方法來通知欠痴,這里就涉及到了android調用js迄靠,此處會有一個大坑Android調用js的坑,即所有的webView方法需要在同一線程調用喇辽,否則就會報錯掌挚。

這里還有一個地方要注意,傳遞數(shù)據(jù)最好傳json菩咨,這是為了方便以后的拓展吠式,比如在我的項目中onButtonClick需要傳遞app包名過來,如果這一次不傳json抽米,在以后迭代版本時假如又要添加一個字段特占,這時候你選擇傳遞一個json,新的版本當然支持云茸,但老的版本由于數(shù)據(jù)格式不同會出現(xiàn)解析錯誤是目,如果一開始就使用json就能避免這個問題了。

還有查辩,如果app有混淆的話胖笛,記得不能混淆聲明的接口,否則網(wǎng)頁將無法找到該接口宜岛〕び唬混淆如下:

#網(wǎng)頁接口不能被混淆
-keepattributes *Annotation*
-keepattributes JavascriptInterface
-keep class com.xxx.xxx.activities.Html5Activity$JsInteration { *; }

網(wǎng)頁端實現(xiàn)

由于我對網(wǎng)頁端不熟,只能現(xiàn)學現(xiàn)做萍倡,這里遇到了一個坑身弊,就是js方法如果有用到獲取元素的方法,那么此方法就需要放在元素聲明之后列敲。

效果

aa.gif

由于app涉及到下載管理的代碼阱佛,想要做個demo又得抽取下載管理的代碼,demo就有點龐大了戴而,所以就不做demo了凑术。。所意。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末淮逊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扶踊,更是在濱河造成了極大的恐慌泄鹏,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秧耗,死亡現(xiàn)場離奇詭異备籽,居然都是意外死亡,警方通過查閱死者的電腦和手機分井,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門车猬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來霉猛,“玉大人,你說我怎么就攤上這事诈唬『啵” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵铸磅,是天一觀的道長赡矢。 經(jīng)常有香客問我,道長阅仔,這世上最難降的妖魔是什么吹散? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮八酒,結果婚禮上空民,老公的妹妹穿的比我還像新娘。我一直安慰自己羞迷,他們只是感情好界轩,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衔瓮,像睡著了一般浊猾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上热鞍,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天葫慎,我揣著相機與錄音,去河邊找鬼薇宠。 笑死偷办,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的澄港。 我是一名探鬼主播椒涯,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼回梧!你這毒婦竟也來了逐工?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤漂辐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后棕硫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體髓涯,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年哈扮,在試婚紗的時候發(fā)現(xiàn)自己被綠了纬纪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚓再。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖包各,靈堂內(nèi)的尸體忽然破棺而出摘仅,到底是詐尸還是另有隱情,我是刑警寧澤问畅,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布娃属,位于F島的核電站,受9級特大地震影響护姆,放射性物質發(fā)生泄漏矾端。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一卵皂、第九天 我趴在偏房一處隱蔽的房頂上張望秩铆。 院中可真熱鬧,春花似錦灯变、人聲如沸殴玛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滚粟。三九已至,卻和暖如春膝捞,著一層夾襖步出監(jiān)牢的瞬間坦刀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工蔬咬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鲤遥,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓林艘,卻偏偏與公主長得像盖奈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子狐援,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354