使用DeepLink技術(shù)喚醒 App

??移動互聯(lián)時代嘱能,手機作為我們?nèi)粘=涣鞯闹饕浇榱呙罚钶d了許許多多的移動應(yīng)用程序,這些五花八門的應(yīng)用程序極大的豐富了我們的生活惹骂。目前主流移動應(yīng)用程序主要有Native App和Web App兩種實現(xiàn)形式苏携,其中Native App具有良好的用戶黏性和操作體驗。本篇針對從瀏覽器对粪、短信右冻、甚至是在其他APP中喚醒Native APP的需求,幫助Native App開發(fā)者為用戶提供更好的交互體驗著拭,從而建立更穩(wěn)固的用戶關(guān)系纱扭。

一、Native APP喚醒場景

1儡遮、瀏覽器 -> 喚醒APP

??用戶A在手機上通過瀏覽器打開了某APP的M站或者官網(wǎng)乳蛾,則引導(dǎo)用戶打開該APP或者下載該APP。

2、微信肃叶、QQ等 -> 喚醒APP

??用戶通過某APP分享了一條鏈接至微信或QQ蹂随,用戶B點開該鏈接后,引導(dǎo)用戶B打開該APP或者下載該APP因惭。

3岳锁、短信、郵件蹦魔、二維碼等-> 喚醒APP

??用戶A打開了某APP的推廣短信激率,郵件或者掃描二維碼等,引導(dǎo)用戶打開該APP或者下載該APP勿决。

4柱搜、其他APP -> 喚醒APP

??用戶A通過第三方APP分享了一條鏈接至用戶B,用戶B點開該鏈接后剥险,引導(dǎo)用戶B打開指定APP或者下載指定APP。

二宪肖、那么移動平臺提供了哪些喚醒APP的方法呢表制?

目前常見的喚醒APP方式有幾種:

1、URL Scheme

??URL Scheme是iOS控乾,Android平臺都支持么介,只需要原生APP開發(fā)時注冊scheme, 那么用戶點擊到此類鏈接時蜕衡,會自動喚醒APP壤短,借助于URL Router機制,則還可以跳轉(zhuǎn)至指定頁面慨仿。
??這種方式是當(dāng)前使用最廣泛久脯,也是最簡單的,但是需要手機镰吆,APP支持URL Scheme帘撰。
??優(yōu)點: 開發(fā)成本低,絕大多數(shù)都支持万皿,web-native協(xié)議制定也簡單摧找。
??缺點: 錯誤處理情況因平臺不同,難以統(tǒng)一處理牢硅,部分APP會直接跳錯誤頁(比如Android Chrome/41蹬耘,iOS中老版的Lofter);也有的停留在原頁面减余,但彈出提示“無法打開網(wǎng)頁”(比如iOS7)综苔;iOS8以及最新的Android Chrome/43 目前都是直接停留在當(dāng)前頁,不會跳出錯誤提示。
支持情況: iOS在實際使用中休里,騰訊系的微信蛆挫,QQ明確禁止使用,iOS9以后Safari不再支持通過js妙黍,iframe等來觸發(fā)scheme跳轉(zhuǎn)悴侵,并且還加入了確認(rèn)機制,使得通過js超時機制來自動喚醒APP的方式基本不可用拭嫁;Android平臺則各個app廠商差異很大可免,比如Chrome從25及以后就同Safari情況一樣。

2做粤、Universal Links

??在2015年的WWDC大會上浇借,Apple推出了iOS 9的一個功能:Universal Links通用鏈接。如果你的App支持Universal Links怕品,那就可以訪問HTTP/HTTPS鏈接直接喚起APP進(jìn)入具體頁面妇垢,不需要其他額外判斷;如果未安裝App肉康,訪問此通用鏈接時闯估,可以一個自定義網(wǎng)頁。

3吼和、Android App Links

??在2015年的Google I/O大會上涨薪,Android M宣布了一個新特性:App Links讓用戶在點擊一個普通web鏈接的時候可以打開指定APP的指定頁面,前提是這個APP已經(jīng)安裝并且經(jīng)過了驗證炫乓,否則會顯示一個打開確認(rèn)選項的彈出框刚夺。在推動deep linking上Google和Apple可謂英雄所見略同,優(yōu)缺點也大致相同末捣,只支持Android M以上系統(tǒng)侠姑。

??總結(jié)以上各種方案從長遠(yuǎn)趨勢來看都是Deep Links技術(shù),都需要

  • 一個支持HTTPS的Web站

三箩做、DeepLink相關(guān)技術(shù)和產(chǎn)品

??目前市面移動DeepLink相關(guān)技術(shù)和產(chǎn)品结借,包括系統(tǒng)基礎(chǔ)技術(shù),巨頭產(chǎn)品卒茬,創(chuàng)新產(chǎn)品船老,圖示如下。

Deep Link技術(shù)產(chǎn)品棧

四圃酵、DeepLink全方位解析

??所謂DeepLink(深度鏈接)就是支持在移動App自由跳轉(zhuǎn)的技術(shù)柳畔,在PC的Web時代,這個問題簡化一個HTTP地址郭赐。到了移動時代薪韩,這個問題變得復(fù)雜起來确沸,移動操作系統(tǒng)有多家,各家處理應(yīng)用間跳轉(zhuǎn)的底層技術(shù)都不一樣俘陷,調(diào)用方式罗捎、代碼都不同拉盾,支持的力度也不同捉偏。目前也沒有任何行業(yè)協(xié)會致力于解決這個問題夭禽,沒有像W3C組織解決Web的規(guī)范化。

1菩彬,什么是deeplink?什么是applink?兩者的關(guān)系和區(qū)別是什么潮梯?
??deeplink是從攔截外部請求到app內(nèi)并定位到具體頁面的技術(shù).
??簡單講酷麦,就是你在手機上點擊一個鏈接之后沃饶,可以直接鏈接到app內(nèi)部的某個頁面轻黑,而不是app正常打開時顯示的首頁氓鄙。不似web,一個鏈接就可以直接打開web的內(nèi)頁升酣,app的內(nèi)頁打開态罪,必須用到deeplink技術(shù)。

2复颈,deeplink的作用是什么?
??deeplink能夠?qū)⑼獠苛髁恳龑?dǎo)到app內(nèi), 并提供連貫的瀏覽體驗, 實在是引流的大殺器.
??deeplink還做高效的流量分發(fā). 通過外部url的投放和內(nèi)部攔截, 可以針對不同場景直接分發(fā)流量到具體頁面, 將用戶直接引導(dǎo)到各個垂直頻道.

3凿菩,有哪些比較成熟的解決方案衅谷?
??魔窗等

4,安全性如何陡叠?
Android Intent Scheme URLs攻擊

五肢执、技術(shù)實現(xiàn)

下面以Android為例實現(xiàn)瀏覽器喚醒APP预茄。

一)瀏覽器喚醒APP
1耻陕,首先創(chuàng)建Android工程诗宣。


deeplink demo

2召庞,新建DeepLinkActivity篮灼,并在清單文件中配置如下:

 <!--&lt;!&ndash; Accepts URIs that begin with "example://gizmos” &ndash;&gt;-->
        <!--<data android:scheme="example"-->
        <!--android:host="gizmos" />-->
        <!--&lt;!&ndash; Accepts URIs that begin with "http://www.example.com/gizmos” &ndash;&gt;-->
        <!--<data-->
        <!--android:host="www.xp.pro.deeplinkdemo"-->
        <!--android:pathPrefix="/gizmos"-->
        <!--android:scheme="http" />-->
        <activity android:name=".DeepLinkActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

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

                <!-- Accepts URIs that begin with "example://gizmos” -->
                <data
                    android:host="detail"
                    android:scheme="xp" />
            </intent-filter>
        </activity>

3诅诱,網(wǎng)頁中使用如下代碼髓堪,打開app指定頁面:

<a href="xp://detail">打開詳情</a>

4,在app中接收html打開原生頁面請求:

 activityDataWebview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                String url = request.getUrl().toString();
                Uri uri = Uri.parse(url);
                if (uri.getScheme().equals("xp") && uri.getHost().equals("detail")) {
                    Toast.makeText(MainActivity.this, "HTML open Android native App success!", Toast.LENGTH_LONG).show();
                    Intent intent = new Intent();
                    intent.setData(uri);
                    startActivity(intent);
                } else {
                    view.loadUrl(url);
                }
                return true;
            }
        });

??從上面的代碼可以看到協(xié)議頭時自定義的"xp"娘荡,在測試過程中發(fā)現(xiàn):href中的鏈接在瀏覽器輸入框里面無法直接打開,只能在html代碼中打開炮沐。

完整代碼見:
https://github.com/XieXiePro/DeeplinkDemo

附:
1疤孕,用python快速搭建http服務(wù)器訪問html及文件央拖。
??如果你的電腦已經(jīng)裝上了Python祭阀,那么鹉戚,搭建一個靜態(tài)文件服務(wù)器將是一件非常簡單的事情专控。
??只需進(jìn)入到項目文件夾抹凳,運行下面這一條命令,就可以把該文件夾作為一個HTTP服務(wù)器的根目錄(后面8888為端口):

python -m SimpleHTTPServer 8888

??這種方法搭建起來的服務(wù)器基本能滿足調(diào)試使用伦腐,如果不夠可以試試增強版BaseHTTPServer
??在Python3中,‘SimpleHTTPServer’已經(jīng)變?yōu)椤甴ttp.server’了柏蘑,對應(yīng)命令為:

python3 -m http.server 8888

??如果要停止HTTP服務(wù)器幸冻,按Ctrl+C即可洽损。

2碑定,Android模擬器訪問本地服務(wù)器 localhost延刘。
要把localhost或者127.0.0.1改為10.0.0.2才能訪問到本地的服務(wù)器數(shù)據(jù)。

3,本實例主要實現(xiàn):
deeplink 原生啟動原生頁面祭芦,可支持應(yīng)用內(nèi)跳轉(zhuǎn)及跨應(yīng)用啟動。
deeplink Html啟動原生頁面,可支持本地html加載及服務(wù)器訪問Html啟動原生頁面。

參考鏈接:
1、喚醒 App 的那些事
2叮趴、iOS/Android 瀏覽器(h5)及微信中喚起本地APP
3割笙、移動DeepLink的前生今世
4、Deep Link是什么
5眯亦、Deep Link技術(shù)
6伤溉、Android實現(xiàn)通過瀏覽器點擊鏈接打開本地應(yīng)用(APP)并拿到瀏覽器傳遞的數(shù)據(jù)
7、html與iOS/Android的兼容交互

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妻率,一起剝皮案震驚了整個濱河市乱顾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宫静,老刑警劉巖走净,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件券时,死亡現(xiàn)場離奇詭異,居然都是意外死亡伏伯,警方通過查閱死者的電腦和手機橘洞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來说搅,“玉大人炸枣,你說我怎么就攤上這事∨螅” “怎么了适肠?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長候引。 經(jīng)常有香客問我侯养,道長,這世上最難降的妖魔是什么背伴? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任沸毁,我火速辦了婚禮,結(jié)果婚禮上傻寂,老公的妹妹穿的比我還像新娘息尺。我一直安慰自己,他們只是感情好疾掰,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布搂誉。 她就那樣靜靜地躺著,像睡著了一般静檬。 火紅的嫁衣襯著肌膚如雪炭懊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天拂檩,我揣著相機與錄音侮腹,去河邊找鬼。 笑死稻励,一個胖子當(dāng)著我的面吹牛父阻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播望抽,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼加矛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了煤篙?” 一聲冷哼從身側(cè)響起斟览,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辑奈,沒想到半個月后苛茂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體已烤,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年味悄,在試婚紗的時候發(fā)現(xiàn)自己被綠了草戈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡侍瑟,死狀恐怖唐片,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涨颜,我是刑警寧澤费韭,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站庭瑰,受9級特大地震影響星持,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弹灭,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一督暂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧穷吮,春花似錦逻翁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驾诈,卻和暖如春缠诅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乍迄。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工管引, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人闯两。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓褥伴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親生蚁。 傳聞我的和親對象是個殘疾皇子噩翠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

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

  • 前段時間公司讓調(diào)研一下DeepLink戏自,說以后會用到邦投,之前看了很久,并做了個demo擅笔,現(xiàn)整理一下志衣,方便以后查閱屯援,如...
    Jinbeen閱讀 14,834評論 11 44
  • 移動互聯(lián)網(wǎng)時代,信息的分享傳播無疑是 App 引流增長的關(guān)鍵念脯,與其花費大量精力和成本找渠道狞洋、硬推廣,不如從細(xì)節(jié)下手...
    La_我們閱讀 4,863評論 0 4
  • Deeplink绿店,簡單講吉懊,就是你在手機上點擊一個鏈接之后,可以直接鏈接到app內(nèi)部的某個頁面假勿,而不是app正常打開...
    Robertbiu閱讀 1,015評論 0 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月借嗽,有人笑有人哭,有人歡樂有人憂愁转培,有人驚喜有人失落恶导,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,536評論 28 53
  • 人工智能是什么?什么是人工智能浸须?人工智能是未來發(fā)展的必然趨勢嗎惨寿?以后人工智能技術(shù)真的能達(dá)到電影里機器人的智能水平嗎...
    ZLLZ閱讀 3,778評論 0 5