應用內跳轉Scheme協(xié)議

本文講解的是一種App內頁面跳轉協(xié)議枪向,這里的跳轉包括應用內跳轉谷羞、H5與Native跳轉,服務器通知客戶端如何跳轉等痕貌。

在講解應用內跳轉協(xié)議之前我們先講解一下H5與Native相互跳轉的相關知識點》缯郑現(xiàn)在越來越多的App采用了Native + H5方式開發(fā),其中Native與H5頁面如何交互舵稠?google提供了一個公共的方式:js與native互調超升,即js可以調用Native方法,Native同樣也可以調用js方法哺徊;

但是這種交互方式存在著不少問題:

1室琢、Java 調用 js 里面的函數(shù)、效率并不是很高唉工、估計要200ms左右吧研乒、做交互性很強的事情、這種速度很難讓人接受淋硝、而js去調Java的方法雹熬、速度很快、50ms左右谣膳、所以盡量用js調用Java方法

2竿报、Java 調用 js 的函數(shù)、沒有返回值继谚、調用了就控制不到了

3烈菌、Js 調用 Java 的方法、返回值如果是字符串花履、你會發(fā)現(xiàn)這個字符串是 native 的芽世、轉成 locale 的才能正常使用、使用 toLocaleString() 函數(shù)就可以了诡壁、不過這個函數(shù)的速度并不快济瓢、轉化的字符串如果很多、將會很耗費時間

4妹卿、網(wǎng)頁中盡量不要使用jQuery旺矾、執(zhí)行起來需要5-6秒、最好使用原生的js寫業(yè)務腳本夺克、以提升加載速度箕宙、改善用戶體驗

5、Android4.2以下的系統(tǒng)存在著webview的js對象注入漏洞…(不清楚的可以google)

基于這種種的原因铺纽,我們并未采用這種方式用于Native與webview交互柬帕,而是采用scheme + cookie的方式;

這里的scheme是一種頁面內跳轉協(xié)議狡门,主要用于支持一下幾種場景:

? ? 服務器下發(fā)跳轉路徑陷寝,客戶端根據(jù)服務器下發(fā)跳轉路徑跳轉相應的頁面;

? ? H5頁面點擊錨點融撞,根據(jù)錨點具體跳轉路徑App端跳轉具體的頁面盼铁;

? ? App端收到服務器端下發(fā)的PUSH通知欄消息,根據(jù)消息的點擊跳轉路徑跳轉相關頁面

下面我將簡單介紹一下scheme的基本概念以及以上三種場景下scheme的具體應用尝偎。

URL scheme 概述

URL scheme 的作用

客戶端應用可以向操作系統(tǒng)注冊一個 URL scheme饶火,該 scheme 用于從瀏覽器或其他應用中啟動本應用。通過指定的 URL 字段致扯,可以讓應用在被調起后直接打開某些特定頁面肤寝,比如車輛詳情頁、訂單詳情頁抖僵、消息通知頁鲤看、促銷廣告頁等等。也可以執(zhí)行某些指定動作耍群,如訂單支付等义桂。也可以在應用內通過 html 頁來直接調用顯示 app 內的某個頁面找筝。

URL scheme 的格式

客戶端自定義的 URL 作為從一個應用調用另一個的基礎,遵循 RFC 1808 (Relative Uniform Resource Locators) 標準慷吊。這跟我們常見的網(wǎng)頁內容 URL 格式一樣袖裕。

一個普通的 URL 分為幾個部分,scheme溉瓶、host急鳄、relativePath、query堰酿。

比如:http://www.baidu.com/s?rsv_bp=1&rsv_spt=1&wd=NSurl&inputT=2709疾宏,這個URL中,scheme 為 http触创,host 為 www.baidu.com坎藐,relativePath 為 /s,query 為 rsv_bp=1&rsv_spt=1&wd=NSurl&inputT=2709嗅榕。

一個應用中使用的 URL 例子(該 URL 會調起車輛詳情頁):uumobile://mobile/carDetail?car_id=123456顺饮,其中 scheme 為 uumobile,host 為 mobile凌那,relativePath 為 /carDetail兼雄,query 為 car_id=123456。


Scheme定義Activity

1)在Androidmanifest.xml中定義scheme

這樣我們便定義了能夠接受scheme請求的activity實例帽蝶,當網(wǎng)頁或者是Android代碼發(fā)送這種規(guī)則scheme的請求的時候就能夠吊起NativeAppActivity了赦肋。



實現(xiàn)NativeAppActivity

NativeAppActivity這個類中主要用于實現(xiàn)對scheme的解析,然后做出相應的動作励稳,比如請求scheme跳轉登錄頁面佃乘,我們可以這樣定義

uumobile://appname/gotoLogin

我們可以通過Intent對象獲取調用的scheme的host等信息

this.getIntent().getScheme();//獲得Scheme名稱

this.getIntent().getDataString();//獲得Uri全部路徑


3)通過服務器下發(fā)跳轉路徑跳轉相應頁面

startActivity(newIntent(Intent.ACTION_VIEW, Uri.parse("uumobile://yongche/123123123")));

這里的”uumobile://yongche/123123123”就是服務器下發(fā)的跳轉路徑,當我們執(zhí)行startActivity的時候就會調起NativeAppActivity驹尼,然后我們通過在NativeAppActivity解析scheme的內容趣避,跳轉相應的頁面。


4)通過在H5頁面的錨點跳轉相應的頁面


可以發(fā)現(xiàn)我們?yōu)閃ebview設置了WebViewClient新翎,并重寫了WebViewClient的shouldOverrideUrlLoading方法程帕,然后我們解析錨點的url,并根據(jù)解析的內容調起NativeAppActivity的scheme Activity地啰,然后在NativeAppActivity中解析scheme的內容并跳轉相應的頁面愁拭。

5)根據(jù)服務器下發(fā)通知欄消息,App跳轉相應的頁面



服務器下發(fā)的所有的通知都是先跳轉這里的NotificationActivity亏吝,然后在這里執(zhí)行跳轉其他Activity的邏輯岭埠,而這里的H5Constant的buildSchemeFromUrl方法就是構造跳轉頁面Intent對象的,我們可以看一buildSchemeFromUrl方法的具體實現(xiàn):

這樣我們就搞構造除了跳轉NativeAppActivity的Intent對象,并將scheme字符串傳遞給了NativeAppActivity惜论,這樣在NativeAppActivity中就可以解析scheme字符串并執(zhí)行相應的跳轉邏輯了许赃。

總結:

Android中的scheme是一種非常好的實現(xiàn)機制,通過定義自己的scheme協(xié)議来涨,可以非常方便跳轉app中的各個頁面图焰;

通過scheme協(xié)議启盛,服務器可以定制化告訴App跳轉那個頁面蹦掐,可以通過通知欄消息定制化跳轉頁面,可以通過H5頁面跳轉頁面等僵闯。

原文:https://blog.csdn.net/qq_23547831/article/details/51685310

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末卧抗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鳖粟,更是在濱河造成了極大的恐慌社裆,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件向图,死亡現(xiàn)場離奇詭異泳秀,居然都是意外死亡,警方通過查閱死者的電腦和手機榄攀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門嗜傅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人檩赢,你說我怎么就攤上這事吕嘀。” “怎么了贞瞒?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵偶房,是天一觀的道長。 經(jīng)常有香客問我军浆,道長棕洋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任乒融,我火速辦了婚禮掰盘,結果婚禮上,老公的妹妹穿的比我還像新娘簇抵。我一直安慰自己庆杜,他們只是感情好,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布碟摆。 她就那樣靜靜地躺著晃财,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上断盛,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天罗洗,我揣著相機與錄音,去河邊找鬼钢猛。 笑死伙菜,一個胖子當著我的面吹牛,可吹牛的內容都是我干的命迈。 我是一名探鬼主播贩绕,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼壶愤!你這毒婦竟也來了淑倾?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤征椒,失蹤者是張志新(化名)和其女友劉穎娇哆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勃救,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡碍讨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蒙秒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勃黍。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖税肪,靈堂內的尸體忽然破棺而出溉躲,到底是詐尸還是另有隱情,我是刑警寧澤益兄,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布锻梳,位于F島的核電站,受9級特大地震影響净捅,放射性物質發(fā)生泄漏疑枯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一蛔六、第九天 我趴在偏房一處隱蔽的房頂上張望荆永。 院中可真熱鬧,春花似錦国章、人聲如沸具钥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骂删。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宁玫,已是汗流浹背粗恢。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留欧瘪,地道東北人眷射。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像佛掖,于是被迫代替她去往敵國和親妖碉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容

  • 在H5頁面瘋狂的今天苦囱,H5和Native的交互就至關重要嗅绸,而且交互的方式有很多,google提供了一個公共的方式:...
    justCode_閱讀 1,610評論 0 1
  • 在Android開發(fā)中撕彤,不同Activity之間的跳轉和切換是很常見的,這使得APP的內容更加豐富猛拴,功能更為多樣羹铅,...
    登高且賦閱讀 54,783評論 12 61
  • 自律給我自由,堅持運動打卡5天愉昆,相信每天進步一點點职员,堅持帶來大改變! 本周孩子學習內容: 本周《簡愛》 下周《追風...
    紫云奇峰落寶軒閱讀 119評論 0 0
  • 第一部分 定位:行行又列列 1.位置決定命運 (1)元素周期表一方面看起來整潔精煉跛溉,另一方面它雜亂無章焊切,只有那些真...
    木宇軒閱讀 8,481評論 0 4
  • 從字面意思上來講,偏執(zhí)分裂有點偏激不正常的感覺芳室,好像做的事情都是錯誤的专肪,但其實不然。前一篇文章中舉例堪侯,有不...
    城市格調劉姣閱讀 438評論 0 0