寫在前面:有個需求,在微信的公衆号上,通過打開網頁,喚醒已經安裝在手機上的APP,事實上,直接在微信上打開不可行,因為微信對這類喚醒有屏蔽,原因見後文。但是可以通過右上角的在浏覽器中打開進入網頁,再喚醒APP。
附上文中Android被喚醒端源碼位址:
http://download.csdn.net/detail/daijin888888/9295659
首先做成HTML的頁面,頁面内容格式如下:
例如,我的是:scheme://host/datastring
各個項目含義如下所示:
scheme:判别啟動的App。 ※詳細後述
host:适當記述
path:傳值時必須的key ※沒有也可以
query:擷取值的Key和Value ※沒有也可以
形成的頁面源碼如下:
<!DOCTYPE html>
<html>
<body>
<a href="scheme://host/datastring" target="_blank" rel="external nofollow" >啟動應用程式</a>
</body>
</html>
再将這個頁面内容釋出到伺服器上,擷取在伺服器上通路的位址(區域網路内手機可以通過WiFi接入)
當然你也可以寫另一個原生APP,裡面有個webview加載了這樣的網頁,一樣能喚醒。
這裡提供一個用原生APP的webview喚醒的示例。點選下載下傳
接下來是Android端。
首先在AndroidManifest.xml的MAIN Activity下追加内容,完整标簽如下:
<activity
android:name="com.example.htmllauncher.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="host"
android:scheme="scheme" />
</intent-filter>
</activity>
接下來在Activity中需要取值的地方添加以下代碼,我是直接寫在OnCreate函數裡的:
Intent intent = getIntent();
if (intent != null) {
String action = intent.getAction();
String dataString = intent.getDataString();
if (dataString != null) {
Toast.makeText(this, dataString, Toast.LENGTH_LONG).show();
}
}
這樣就能擷取到URL傳遞過來的值了。
用同一台手機,安裝以上app,再到該手機的微信中,利用微信内置的浏覽器(你可以将之前擷取的頁面在伺服器上的位址發給你的任何聯系人,點選發送的消息即可打開網頁)打開那個簡單的HTML頁面,注意:直接打開scheme://host/datastring是不可行的,微信不會把這串字元解析成網址,必須包裝成網頁才能借助微信的浏覽器打開。進入後就是我們剛剛設計的頁面。
這個時候,直接點選“啟動應用程式”是不會喚醒之前安裝的APP的,因為微信做了屏蔽,你需要在右上角的菜單中選擇“在浏覽器中打開”。這個時候,有些浏覽器就可以喚醒,有些浏覽器則不行,比如筆者測試機MX4上的内置浏覽器不行,UC浏覽器就能喚醒。部分浏覽器不能喚醒,筆者查閱了很多資料也不能徹底解決,如果有讀者有解決方案,敬請留言,多謝!
附文(摘錄):
微信中為什麼無法喚醒App,需要“用浏覽器打開”?
因為微信對所有的分享連接配接做了scheme屏蔽,也就是說分享連接配接中所有對于scheme的調用都被微信封掉了。
那為什麼有些應用是可以喚起的,比如大衆點評,嘀嘀打車?
從非技術角度講,因為大衆點評,嘀嘀打車都是微信的幹兒子,親兒子。對于兒子有特殊照顧。
從技術角度講,微信有一個白名單,對于在白名單中的分享連接配接是不會屏蔽掉scheme調用的。
聽不明白?那我們舉一個例子。
比如大衆點評的分享連接配接是 http://dazhongdianping.share.1.com
對應到微信白名單中就會有 http://dazhongdianping 這一項,
所有源自于這個連接配接的分享,都不會屏蔽scheme,
比如 http://dazhongdianping.share.2.com
http://dazhongdianping.share.3.com
就算是大衆點評的子公司也可以,http://zigongsi.dazhongdianping.share.3.com,
跟域名也在白名單中,是以也可以使用。
到這裡,大家就應該明白,想借用大衆點評的scheme,
繞過這個問題是不可能的,除非你的分享連接配接能挂到大衆點評的根域名上。
這個問題應該解釋清楚了,另外提一句,對于下載下傳 apk 這種,微信是屏蔽任何應用的,對于兒子也不例外,是以你想提供下載下傳連結,無論你是不是兒子,都逃不過使用浏覽器打開之中 low 的方式了