Android deep links技術實現

說好要寫示例文章來給大家演示一下什么樣的文章才比較適合在微信上發(fā),那么本篇就是一個典型的標桿了。有朋友在群里問我,怎么樣實現從網頁中直接打開App的效果,這個問題實現起來并不復雜,但是卻有很多人都不會,像這種文章就太適合在微信上發(fā)了。

實際上這種技術是個一個專業(yè)名詞的,叫deep links,在Google Ads里面用的比較多。比如說你是一個購物的App,花錢在人家的網頁上掛了個裙子的廣告鏈接,那么當用戶點擊了這個廣告鏈接,最理想的效果就是直接打開你的App的裙子界面,然后用戶可能就會直接購買了。

怎么樣實現這種效果呢?其實并不復雜,說白了就是利用Android的隱式Intent機制,對于隱式Intent如果還不了解的朋友請參考第一行代碼第二章,講的很透徹。

下面開始嘗試實現deep links功能,首先我們來認識一下鏈接,對于鏈接大家肯定是再熟悉不過了,比如這樣:

http://www.example.com/

其中http部分是協(xié)議,www.example.com部分是域名。那么根據我們平時上網的經驗,域名部分一般都是各個網站的具體網址,而協(xié)議部分基本都是http,因為這是一個最廣泛使用的協(xié)議。

而我們實現deep links功能其實也是借助這樣的鏈接機制,但是我們不必拘泥于http協(xié)議,而是可以自定義任何的協(xié)議。

了解了這個概念之后就可以開始寫一些具體的代碼了,新建一個Android項目,然后打開AndroidManifest.xml文件,在MainActivity中添加如下內容:

? ?...... ? ? ? ? ? ? ? ? ? ? ? ? ? ?

對于熟悉隱式Intent的部分,這部分代碼應該不難理解。這里我們新增了一個標簽,在里面加入了action,category和data三部分內容。其中action和category部分要固定寫成這個樣子,我們不能修改的,因為當你點擊一個html鏈接時系統(tǒng)自動發(fā)出就是這樣的action和category。

然后data部分就需要我們來自定義了,android:scheme用于指定協(xié)議,類似于http這樣的東西,這里我們指定成了com.example.androidtest,這是一個自定義的協(xié)議,指定成這樣是為了避免和其它的應用程序沖突,從而誤把deep links鏈到人家的程序里去了。除了android:scheme之外,我們還可以通過android:host來指定域名,android:port來指定端口,android:path來指定路徑,這些屬性都可以對deep links進行更多的限制,要滿足特定條件才能打開指定App。那這里我希望只要是使用com.example.androidtest協(xié)議的鏈接就能打開我們的程序,因此就不對其他屬性進行設置了。

現在將程序安裝到手機上就可以了。

為了測試這個功能,我在本地搭建了一個服務器,然后在網頁上放了這樣一個鏈接:

Try Deep Links

也就是說,當點擊了Try Deep Links這個鏈接時,會嘗試跳轉到com.example.androidtest://buydress這個界面,那么我們現在來試試吧,結果如下:

可以看到,deep links已經生效了。

那么有的朋友可能還會有疑問,這樣只是打開了程序的MainActivity,如果真的像剛才介紹的一樣,我想要直接打開購買裙子的界面該怎么辦呢?總不能給每個Activity都設置一個deep link吧?確實沒有必要,我們可以通過非常簡單的界面跳轉來實現這個功能。比如說上面的鏈接,除了scheme之外,還有一個叫做buydress的host,我們只需要在MainActivity中取出這個host,判斷出來原來是你想買裙子的,然后跳轉到裙子界面就可以了。具體代碼如下:

publicclassMainActivityextendsAppCompatActivity{

@OverrideprotectedvoidonCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState); ? ? ? ?setContentView(R.layout.activity_main);

Intentintent=getIntent();

if(intent!=null) {

Uriuri=intent.getData();

Stringhost=uri.getHost();

if("buydress".equals(host)) {

// 跳轉到賣裙子界面} ? ? ? ?} ? ?}}

本篇文章的內容就到這里, 是不是感覺簡單易懂,而又可以學到東西?沒有貼大量的代碼,也沒有長篇大論講一個知識點,10分鐘就能讀完的精煉文章,這就是微信上最適合發(fā)的標桿技術文章了。那本篇文章也是一個比較典型的示例,希望所有有意向向我投稿的作者們可以參考一下, 不一定非要是多少高級的技術才可以拿來投稿的,你平時工作總結出的一些別人不知道的心得,也可以拿出來分享的。

至于我用來錄制GIF圖片的工具,我知道也會有很多朋友好奇,這里統(tǒng)一回答一下:Mac電腦上我使用的licecap,Window上我使用的GifCam,都是非常好用的工具,啟用錄制之后對模擬器進行操作就可以了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,023評論 25 709
  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,871評論 2 45
  • 朗達.伯恩(Rhonda Byrne)的《秘密》,這是本教人如何“心想事成”的書,匯集了很多哲學家、作家、心理學家...
    杜小貓閱讀 404評論 0 0
  • 1. Servlet是什么? sun公司制訂的一種用來擴展web服務器功能的組件規(guī)范。 (1)擴展web服務器功能...
    smallnumber閱讀 355評論 0 0
  • 第一周: 我是誰?我想要什么?如何達到?對應的就是:自我-目標-路徑。 針對現在在做的象禮品牌的事情,...
    上帝愛非洲閱讀 284評論 0 0

友情鏈接更多精彩內容