Android頁面跳轉(zhuǎn)協(xié)議_URL Scheme詳解

什么是 URL Scheme败明?

android中的scheme是一種頁面內(nèi)跳轉(zhuǎn)協(xié)議,是一種非常好的實(shí)現(xiàn)機(jī)制,通過定義自己的scheme協(xié)議,可以非常方便跳轉(zhuǎn)app中的各個頁面糯彬;通過scheme協(xié)議,服務(wù)器可以定制化告訴App跳轉(zhuǎn)那個頁面葱她,可以通過通知欄消息定制化跳轉(zhuǎn)頁面撩扒,可以通過H5頁面跳轉(zhuǎn)頁面等。

URL Schema應(yīng)用場景

客戶端應(yīng)用可以在服務(wù)端注冊一個URL Scheme吨些,該Scheme用于從瀏覽器或其他應(yīng)用啟動本應(yīng)用搓谆。通過指定的URL字段,可以讓應(yīng)用在被調(diào)起后直接打開某些特定界面锤灿,比如商品詳情頁挽拔,活動詳情頁等。也可以執(zhí)行某些特定的動作但校,如完成支付等螃诅。也可以在應(yīng)用內(nèi)通過html頁來直接調(diào)用顯示app內(nèi)的某個界面。綜上URL Schema使用場景大致分以下幾種:

  • 服務(wù)器下發(fā)跳轉(zhuǎn)路徑状囱,客戶端根據(jù)服務(wù)器下發(fā)跳轉(zhuǎn)路徑跳轉(zhuǎn)相應(yīng)的頁面
  • H5頁面點(diǎn)擊錨點(diǎn)术裸,根據(jù)錨點(diǎn)具體跳轉(zhuǎn)路徑APP端跳轉(zhuǎn)具體的頁面
  • APP端收到服務(wù)器端下發(fā)的PUSH通知欄消息,根據(jù)消息的點(diǎn)擊跳轉(zhuǎn)路徑跳轉(zhuǎn)相關(guān)頁面
  • APP根據(jù)URL跳轉(zhuǎn)到另外一個APP指定頁面

URL Schema協(xié)議格式

一個完整的Scheme的協(xié)議格式由 scheme亭枷、userInfo袭艺、host、port叨粘、path猾编、query和fragment 組成。結(jié)構(gòu)如下:

scheme://userInfo@host:port/path?query#fragment

scheme://是固定的格式升敲。userInfo@ 可以省略答倡,host 是必須的。port 驴党、query 和 fragment 也是可以省略的瘪撇。

其中scheme既可以是Android已經(jīng)定義好的協(xié)議,也可使用我們自定義的港庄。Android 常見的scheme 協(xié)議有:content 倔既、file、http 等鹏氧。如果我們自定義協(xié)議就可以隨意使用一些字符串來限定協(xié)議渤涌。當(dāng)然最好是有一定含義的字符串。如下面的協(xié)議:

wangyy://ricky@com.wangyy.sample:8888/goodDetail?param1=參數(shù)1&param2=參數(shù)2#片段"
  • wangyy : 即為 Scheme 把还,即我們自定義的Scheme 協(xié)議名稱
  • ricky :即為用戶信息实蓬,注意它跟host 之間一定要跟上 @ 符號
  • com.wangyy.sample : 即為 host 稿存;這里我用了一個包名
  • 8888 : 即為 port ;自定義協(xié)議的端口號
    -goodDetail: 即為path 瞳秽,路徑;代表scheme的指定的頁面率翅,我們匹配頁面的時候练俐,這里就是匹配的重點(diǎn)
  • param1 和 param2:即為 query ,代表我們跳轉(zhuǎn)到指定界面后傳遞的參數(shù)
  • 片段:即為fragment,也可以把它看成跳轉(zhuǎn)到指定界面后傳遞的參數(shù)冕臭,只不過它只能傳遞一個腺晾,而query 可以傳遞多個它會把 #后的所有的內(nèi)容都看成一個片段。

Android中 URL Scheme的使用

首先配置需要跳轉(zhuǎn)的Activity辜贵,Mainifest文件配置如下:

<activity android:name=".SchemeActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />

                <data
                    android:host="com.wangyy.sample"
                    android:path="/goodsDetail"
                    android:port="8888"
                    android:scheme="wangyy" />
            </intent-filter>
        </activity>

SchemeActivity

class SchemeActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_scheme)
        val data = intent.data
        Log.i("TAG", "host = ${data.host} path = ${data.path} query = ${data.query}")
        val param = data.getQueryParameter("goodsId")
        Log.i("TAG", "param: $param")
    }
}

1. H5喚起APP界面

在網(wǎng)頁中調(diào)用:

<a href="wangyy://com.wangyy.sample:8888/goodsDetail?goodsId=10011002">打開商品詳情</a>

404?悯蝉,試試系統(tǒng)自帶瀏覽器或者谷歌瀏覽器吧⊥锌肯定能成功的鼻由。

2. APP內(nèi)跳轉(zhuǎn)界面

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        helloBtn.setOnClickListener {
            val intent = Intent(Intent.ACTION_VIEW,
                    Uri.parse("wangyy://com.wangyy.sample:8888/goodsDetail?goodsId=10011002"))
            startActivity(intent)
        }
    }
}

運(yùn)行結(jié)果如下:

01-11 11:18:55.542 7920-7920/com.wangyy.example I/TAG: host = com.wangyy.sample path = /goodsDetail query = goodsId=10011002
01-11 11:18:55.542 7920-7920/com.wangyy.example I/TAG: param: 10011002

其他運(yùn)用方式都基于樣例,源碼地址:URL_SchemeDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厚棵,一起剝皮案震驚了整個濱河市蕉世,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌婆硬,老刑警劉巖狠轻,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異彬犯,居然都是意外死亡向楼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門谐区,熙熙樓的掌柜王于貴愁眉苦臉地迎上來湖蜕,“玉大人,你說我怎么就攤上這事卢佣≈剀” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵虚茶,是天一觀的道長戈鲁。 經(jīng)常有香客問我,道長嘹叫,這世上最難降的妖魔是什么婆殿? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮罩扇,結(jié)果婚禮上婆芦,老公的妹妹穿的比我還像新娘怕磨。我一直安慰自己,他們只是感情好消约,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布肠鲫。 她就那樣靜靜地躺著,像睡著了一般或粮。 火紅的嫁衣襯著肌膚如雪导饲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天氯材,我揣著相機(jī)與錄音渣锦,去河邊找鬼。 笑死氢哮,一個胖子當(dāng)著我的面吹牛袋毙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冗尤,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼听盖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了裂七?” 一聲冷哼從身側(cè)響起媳溺,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碍讯,沒想到半個月后悬蔽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捉兴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年蝎困,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倍啥。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡禾乘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出虽缕,到底是詐尸還是另有隱情始藕,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布氮趋,位于F島的核電站伍派,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏剩胁。R本人自食惡果不足惜诉植,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昵观。 院中可真熱鬧晾腔,春花似錦舌稀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至剔应,卻和暖如春潮罪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背领斥。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沃暗,地道東北人月洛。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像孽锥,于是被迫代替她去往敵國和親嚼黔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容