呼起客戶端

2022-07-05 22:09:18 字數 3293 閱讀 7822

張楠·7 個月前

在 android 中,最標準的方式,就是在應用的配置檔案 androidmanifest.xml 中,通過 標籤裡的 來宣告:「本應用可以更好的處理某些 url 對應的頁面,瀏覽器你交給我吧」。套在例子上,宣告形如:

做了上述的宣告之後,在 chrome 裡訪問 豌豆莢的員工工作方式是什麼樣的?,便可以跳轉到知乎 android 客戶端,並開啟這個問題的頁面。不過這個解決方案有挺多問題,最重要的乙個原因是:「相容性」。

而以上瀏覽器,大都不遵守 android 的協定,不支援通過匹配 url 跳轉到更適合的應用中去。臆測其原因,大抵是國內瀏覽器都不願將流量導給其他應用吧。

如此,那就另闢蹊徑,既然 http 協議的 url 會被很多瀏覽器攔自行處理掉,那就不用 http 協議而採用自定義的 scheme 試試看。

將 androidmanifest.xml 中的宣告修改如下:

android:name=

」com.zhihu.android.questionactivity」

>

android:name=

」android.intent.action.view」

/>

android:name=

」android.intent.category.default」

/>

android:name=

」android.intent.category.browsable」

/>

android:scheme=

」zhihu」

android:host=

」questions」

/>

把「開啟應用」的跳轉鏈結設定為形如 」zhihu://questions/…「 的 url,點選後就可以匹配跳轉到應用對應的 activity 中去。當然,如果簡單的使用 標籤來做這件事情,若手機中未安裝知乎客戶端,點選後就會跳轉到乙個錯誤頁面(位址是 zhihu://questions/…)。解決方案也簡單,使用 即可,詳情就不在此贅述。

自定義的 scheme 可以搞定很多瀏覽器,但 chrome 除外。原因是為了更有序的打通瀏覽器頁面和本地應用,chrome 25 後不再支援自定義的 scheme,而推出了 chrome intent,作為標準協議進行推廣,其格式形如:

intent:

//scan/

#intent;

package=com.google.zxing.client.android;

scheme=zxing;

end;

intent:

//questions/...

#intent;

package=com.zhihu.android;

scheme=zhihu;

end;

呼微博客戶端:

test

呼微博客戶端:
var o = "sinaweibo://splash/";

var j = window.open(o, "_blank");

settimeout(function() , 0);

至此,只要利用 ua 資訊,合理使用自定義 scheme 和 chrome intent,就可以搞定市面上幾乎全部的瀏覽器,這就完了嗎?當然沒有!

有辦法解決麼?當然,是有的,」黑科技「 粉墨登場的時刻到了。大家都知道,web 頁面可以發起 ajax 請求用來與伺服器互動,如果這個 」伺服器「 不在雲端,而是在本機呢?沒錯,解決方案就是在應用中繫結本地埠,啟動乙個 http 服務,來響應傳送過來的請求,開啟應用或者是做其他事情。

如果,知乎應用在後台啟動 http 服務,繫結乙個埠,比如:12306 吧。那 web 頁面可以傳送如下的 ajax 請求來實現開啟應用:

$

.ajax

().done

(function

());

當然,要做的足夠細緻,還需要實現類似於 」http://

127.0.0.1:12306/is_inst

alled

「 這樣的 api,如果知乎安裝了,返回 200,如果服務未啟動或者知乎未安裝,自然是會返回 404,由此可以在 web 頁面中判斷是否安裝了知乎應用,進而決定是否要顯示「開啟應用」的按鈕。

通常,必殺技都是有***的,如果需要準確的判斷是否安裝了知乎,就需要這個 http 服務始終存活,否則就沒啟動和沒安裝傻傻分不清楚了。至於如何使得 「乙個已安裝應用在各種情況下都保持後台執行」,則是另乙個充滿了黑科技的領域,待日後再聊聊這個話題。

張楠 ,豌豆莢工程師。目前專注於各種黑科技及 growth hacking 手段。歡迎 e-mail 與 (tou) 我 (jian) 交 (li) 流 (ba):[email protected]

原文:

瘦客戶端 胖客戶端 智慧型客戶端

胖客戶端模式將應用程式處理分成了兩部分 由使用者的桌面計算機執行的處理和最適合乙個集中的伺服器執行的處理。乙個典型的胖客戶端包含乙個或多個在使用者的pc上執行的應用程式,使用者可以檢視並運算元據 處理一些或所有的業務規則 同時提供乙個豐富的使用者介面做出響應。伺服器負責管理對資料的訪問並負責執行一些...

胖客戶端 瘦客戶端和富客戶端

以c s結構開發的網路應用程式,需要為客戶端開發專用的客戶端軟體,相對而言其客戶端比較龐大,在客戶端可以實現很多功能,分擔伺服器的負擔,屬於胖客戶端型別。以b s結構開發的web應用,其客戶端只是乙個瀏覽器,所有業務邏輯由伺服器端進行處理,相對而言客戶端比較瘦小,故稱為瘦客戶端。目前比較流行的一種開...

非同步客戶端和同步客戶端

先寫下我的理解,方便後邊閱讀資料校驗。一 同步客戶端 比如乙個連線有兩個請求,請求1 和 請求2,請求1 先發起請求,請求2後發起請求,則請求2 要等待請求1 響應完成才能接收到響應。舉個棗子,httpclient 傳送get請求,執行緒會一致阻塞,直到有響應結果。二 非同步客戶端 比如乙個連線有兩...