你在小程序里推了一個(gè)活動(dòng),用戶點(diǎn)開卻發(fā)現(xiàn)文章里的小程序卡片灰著點(diǎn)不動(dòng);或者你配置了公眾號(hào)菜單跳小程序,結(jié)果用戶每次點(diǎn)進(jìn)去都停在線上版本首頁,根本到不了活動(dòng)頁。這些都不是偶然的bug,而是跨端跳轉(zhuǎn)的路徑?jīng)]有理清。

小程序和公眾號(hào)看起來都在微信生態(tài)里,但它們運(yùn)行在完全不同的上下文環(huán)境中。小程序是一個(gè)獨(dú)立的運(yùn)行時(shí),有自己的頁面棧和生命周期;公眾號(hào)網(wǎng)頁本質(zhì)上是運(yùn)行在微信內(nèi)置瀏覽器里的H5頁面,受限于瀏覽器安全模型。理解這兩套環(huán)境的邊界,是讓跳轉(zhuǎn)穩(wěn)定運(yùn)行的前提。

本文將跳轉(zhuǎn)方向拆為兩路——公眾號(hào)端發(fā)起跳轉(zhuǎn)到小程序,以及小程序端發(fā)起跳轉(zhuǎn)到公眾號(hào)——然后分別說明每條路徑可用的方法、適用場(chǎng)景、配置步驟和最常見的失敗原因。

一、公眾號(hào)跳小程序:三條路徑,各有利弊

公眾號(hào)側(cè)發(fā)起跳轉(zhuǎn)到小程序,本質(zhì)是讓一個(gè)H5頁面或公眾號(hào)原生的交互組件,喚起小程序。微信提供了三種方法:URL Scheme、開放標(biāo)簽wx-open-launch-weapp、以及公眾號(hào)菜單和文章內(nèi)嵌能力。

1.1 URL Scheme:最直接的喚起方式

URL Scheme是一段固定格式的短鏈接,在微信客戶端內(nèi)打開時(shí)會(huì)喚起指定小程序。你可以在服務(wù)端調(diào)用接口生成,也可以在小程序后臺(tái)「工具」-「生成URL Scheme」手動(dòng)獲取。生成接口需要用到access_token,有效期最長30天,超過后重新生成。

請(qǐng)求示例(服務(wù)端調(diào)用,避免前端暴露密鑰):

POST https://api.weixin.qq.com/wxa/generatescheme?access_token=YOUR_ACCESS_TOKEN
{
  "jump_wxa": {
    "path": "/pages/detail/detail?id=123",
    "query": "",
    "env_version": "release"
  },
  "is_expire": true,
  "expire_time": 1680000000
}

返回的openlink就是可用鏈接,格式如weixin://dl/business/?t=xxx。你可以把這個(gè)鏈接放在公眾號(hào)模板消息的跳轉(zhuǎn)URL、客服消息的跳轉(zhuǎn)鏈接里,也可以配置在公眾號(hào)菜單選擇「跳轉(zhuǎn)網(wǎng)頁」時(shí)填入。

注意: URL Scheme對(duì)個(gè)人主體小程序不支持,且只能在微信客戶端內(nèi)打開。如果你將鏈接放在端外瀏覽器里點(diǎn)擊,只會(huì)顯示一個(gè)空白頁。另外,如果env_version指定為trialdevelop,只有小程序開發(fā)者或體驗(yàn)者才能喚起成功,普通用戶會(huì)直接進(jìn)入線上版頁面或報(bào)錯(cuò)。

1.2 開放標(biāo)簽:公眾號(hào)H5頁面內(nèi)的JSSDK方式

當(dāng)用戶從公眾號(hào)會(huì)話、朋友圈或微信內(nèi)其他入口訪問你的H5頁面時(shí),頁面可以通過微信JS-SDK使用wx-open-launch-weapp開放標(biāo)簽,在頁面內(nèi)渲染一個(gè)可直接點(diǎn)擊跳轉(zhuǎn)小程序的按鈕。這是目前唯一能在H5中主動(dòng)發(fā)起跳轉(zhuǎn)且不需要彈出確認(rèn)框的方式,用戶體驗(yàn)最順滑。

使用開放標(biāo)簽必須按順序完成以下配置:

  1. 綁定JS接口安全域名:在公眾號(hào)后臺(tái)「設(shè)置-公眾號(hào)設(shè)置-功能設(shè)置」中,將H5頁面的域名配置為JS接口安全域名。
  2. 綁定關(guān)聯(lián)關(guān)系:在小程序后臺(tái)「設(shè)置-關(guān)注公眾號(hào)」或公眾號(hào)后臺(tái)「小程序管理」中,將兩者關(guān)聯(lián)。如果是同主體,關(guān)聯(lián)后立即生效;不同主體需要對(duì)方管理員確認(rèn)。
  3. 后端生成簽名:服務(wù)端使用公眾號(hào)的jsapi_ticket,對(duì)當(dāng)前頁面URL(不含#及之后部分)生成簽名,注入wx.config。
  4. 頁面放置標(biāo)簽:在HTML中嵌入開放標(biāo)簽,并設(shè)置path和跳轉(zhuǎn)所需的extra-data

HTML結(jié)構(gòu)最小示例:

<wx-open-launch-weapp
  id="launch-btn"
  username="gh_xxxxxxxx"
  path="/pages/activity/activity.html?id=456"
>
  <script type="text/wxtag-template">
    <button style="width:200px;height:40px;">打開小程序</button>
  </script>
</wx-open-launch-weapp>

點(diǎn)擊該按鈕后,微信會(huì)喚起小程序并跳轉(zhuǎn)到指定path。username是小程序原始ID,不要填A(yù)ppID。

常見失敗場(chǎng)景:

  • 開放標(biāo)簽在非微信客戶端或企業(yè)微信內(nèi)不會(huì)渲染,外觀上像是缺了一塊內(nèi)容。需要做環(huán)境檢測(cè)并給出降級(jí)提示。
  • 如果username寫成了AppID,標(biāo)簽渲染正常但點(diǎn)擊無反應(yīng),且沒有明確報(bào)錯(cuò)。
  • 如果公眾號(hào)與小程序未關(guān)聯(lián),開放標(biāo)簽甚至不會(huì)顯示。

1.3 公眾號(hào)菜單和圖文內(nèi)嵌:運(yùn)營側(cè)最常用的固定入口

公眾號(hào)自定義菜單可以直接配置為「跳轉(zhuǎn)小程序」,不需要寫代碼,在公眾號(hào)后臺(tái)菜單編輯頁選擇對(duì)應(yīng)小程序和頁面路徑即可。這個(gè)入口穩(wěn)定可靠,但用戶點(diǎn)擊時(shí)如果小程序未上線或頁面路徑錯(cuò)誤,只會(huì)停留在當(dāng)前菜單頁,沒有明確錯(cuò)誤提示——你只能通過后臺(tái)數(shù)據(jù)推斷。

公眾號(hào)圖文中可以插入小程序卡片。編輯圖文時(shí)使用「小程序」插入工具,搜索小程序名稱,指定卡片樣式和頁面路徑。用戶點(diǎn)擊卡片進(jìn)入小程序,路徑參數(shù)需要自行拼裝在?之后。一個(gè)容易忽視的限制是:同一篇圖文最多可以插入10個(gè)小程序卡片,超出的部分無法添加,如果是商品介紹類長文需要提前規(guī)劃。

二、小程序跳公眾號(hào):兩條路徑,目的不同

小程序跳轉(zhuǎn)到公眾號(hào),本質(zhì)上不是“跳轉(zhuǎn)到一個(gè)H5頁面”這么簡單。微信限制了小程序直接打開任意公眾號(hào)文章或關(guān)注頁面,你需要區(qū)分兩種目標(biāo):打開公眾號(hào)已有的內(nèi)容(如歷史文章),還是引導(dǎo)用戶關(guān)注公眾號(hào)。

2.1 使用web-view打開公眾號(hào)文章

小程序內(nèi)嵌web-view組件可以直接加載公眾號(hào)已發(fā)布的文章鏈接。前提是業(yè)務(wù)域名已經(jīng)配置為https://mp.weixin.qq.com。

<web-view src="https://mp.weixin.qq.com/s?__biz=xxx&mid=xxx&idx=1&sn=xxx&chksm=xxx"></web-view>

你需要在小程序管理后臺(tái)「開發(fā)-開發(fā)管理-開發(fā)設(shè)置-業(yè)務(wù)域名」中,下載校驗(yàn)文件并放在mp.weixin.qq.com域名根目錄下。由于公眾號(hào)域名由微信控制,你無法自行托管校驗(yàn)文件,所以必須通過關(guān)聯(lián)的公眾號(hào)在后臺(tái)「設(shè)置-公眾號(hào)設(shè)置-功能設(shè)置-業(yè)務(wù)域名」中,將業(yè)務(wù)域名配置為你自己的域名后,再由微信校驗(yàn)通過。實(shí)際上,只要小程序與公眾號(hào)完成了關(guān)聯(lián),微信會(huì)自動(dòng)校驗(yàn)該域名的合法性,無需額外上傳文件——但這項(xiàng)能力僅限關(guān)聯(lián)賬號(hào)之間使用。

web-view方式適合展示內(nèi)容,不適合做用戶引導(dǎo)關(guān)注。因?yàn)閣eb-view內(nèi)顯示的是文章頁面,頁面底部有公眾號(hào)關(guān)注引導(dǎo)入口,但你無法直接控制顯示邏輯。

2.2 使用official-account組件引導(dǎo)關(guān)注

小程序內(nèi)想要直接引導(dǎo)用戶關(guān)注公眾號(hào),需要使用official-account組件。該組件會(huì)在小程序頁面內(nèi)渲染一個(gè)公眾號(hào)關(guān)注入口,用戶點(diǎn)擊后直接跳轉(zhuǎn)到公眾號(hào)資料頁。

配置前提:

  • 小程序與公眾號(hào)已完成關(guān)聯(lián)。
  • 在需要展示該組件的頁面中,場(chǎng)景值必須在微信定義的“具有關(guān)注入口”的場(chǎng)景中,例如:從小程序搜索進(jìn)入、從公眾號(hào)模板消息進(jìn)入、從公眾號(hào)文章內(nèi)嵌小程序卡片進(jìn)入等。如果用戶是從發(fā)現(xiàn)-小程序或最近使用列表進(jìn)入,official-account組件不會(huì)顯示,這是微信的產(chǎn)品策略,目的是避免惡意導(dǎo)流。

使用示例:

<official-account></official-account>

組件支持bindloadbinderror事件,你可以監(jiān)聽是否成功渲染,并在失敗時(shí)用別的交互承接。由于顯示與否依賴場(chǎng)景值,建議結(jié)合wx.getLaunchOptionsSync()獲取場(chǎng)景,做預(yù)判處理:

const launchOptions = wx.getLaunchOptionsSync();
const allowedScenes = [1011, 1013, 1047, 1124]; // 示例,非完整列表
if (allowedScenes.includes(launchOptions.scene)) {
  // 可以期望組件渲染
} else {
  // 引導(dǎo)用戶從其他入口重新進(jìn)入
}

2.3 客服消息與小程序內(nèi)打開公眾號(hào)資料頁

如果你需要讓用戶從你的小程序聯(lián)系客服,可以直接用<button open-type="contact">拉起客服會(huì)話。如果該客服體系綁定了公眾號(hào),用戶發(fā)送消息后會(huì)進(jìn)入公眾號(hào)的客服后臺(tái),形成一個(gè)間接的跳轉(zhuǎn)路徑。

如果你只希望用戶打開公眾號(hào)信息頁進(jìn)行手動(dòng)關(guān)注,可以嘗試使用wx.navigateToMiniProgram跳轉(zhuǎn)到一個(gè)中間小程序的做法——但這依賴第三方,并不穩(wěn)定。微信沒有開放直接從小程序跳轉(zhuǎn)到公眾號(hào)資料頁的API。official-account組件是目前唯一受官方支持的“在頁面上展示關(guān)注入口”的方式,但它不能主動(dòng)以操作觸發(fā)跳轉(zhuǎn)。

三、排查與測(cè)試:用工具代替盲測(cè)

跨端跳轉(zhuǎn)的疑難問題往往與賬號(hào)關(guān)聯(lián)狀態(tài)、環(huán)境版本、域名配置有關(guān)??空鏅C(jī)逐個(gè)點(diǎn)擊測(cè)試效率很低,建議建立一套檢查清單。

  1. 檢查關(guān)聯(lián)狀態(tài):在小程序后臺(tái)「設(shè)置-關(guān)注公眾號(hào)」確認(rèn)關(guān)聯(lián)關(guān)系,注意區(qū)分“同主體關(guān)聯(lián)”和“跨主體關(guān)聯(lián)”,后者需要對(duì)方管理員確認(rèn),且有時(shí)效延遲。如果關(guān)聯(lián)狀態(tài)顯示“已關(guān)聯(lián)”但跳轉(zhuǎn)仍失敗,嘗試解除后重新關(guān)聯(lián)。
  2. 使用微信開發(fā)者工具模擬:開放標(biāo)簽在開發(fā)者工具中不顯示真實(shí)樣式,但可以在控制臺(tái)查看wx.config注入和ready事件。web-view和official-account組件可以在工具中看到渲染結(jié)果。
  3. 版本校驗(yàn):小程序有開發(fā)版、體驗(yàn)版、線上版三套環(huán)境。URL Scheme和開放標(biāo)簽指定的env_version必須與實(shí)際使用者的權(quán)限匹配。線上用戶只能打開release版本。讓測(cè)試人員先添加為項(xiàng)目體驗(yàn)者,再用trial版本Scheme測(cè)試。
  4. 域名檢查:H5頁面的JS接口安全域名、小程序業(yè)務(wù)域名、以及web-view加載的公眾號(hào)文章域名,都要在各自后臺(tái)對(duì)應(yīng)位置配置,且保證協(xié)議為HTTPS。本地調(diào)試時(shí)可以使用微信開發(fā)者工具的「不校驗(yàn)合法域名」選項(xiàng),但絕不能依賴這個(gè)功能驗(yàn)證上線效果。

當(dāng)你建立了上述檢查流程后,絕大多數(shù)跳轉(zhuǎn)故障都能在五分鐘內(nèi)定位到原因——不是配置缺失,就是版本環(huán)境不匹配,極少遇到微信側(cè)的系統(tǒng)性問題。

行動(dòng)建議: 先用最小的關(guān)聯(lián)賬號(hào)測(cè)試路徑走通單向跳轉(zhuǎn)。公眾號(hào)跳小程序優(yōu)先采用開放標(biāo)簽嵌入H5,因?yàn)樗峁┛煽氐狞c(diǎn)擊區(qū)域且無額外彈窗。小程序跳公眾號(hào)優(yōu)先用official-account組件做關(guān)注引導(dǎo),同時(shí)用web-view承載公眾號(hào)長文內(nèi)容。兩種方向都避免在生產(chǎn)環(huán)境中依賴單一路徑,準(zhǔn)備一個(gè)備用方案(比如引導(dǎo)用戶搜索小程序名稱)能讓你在緊急調(diào)整時(shí)保留導(dǎo)流能力。

← 上一篇 別被“豪華案例”帶偏:選擇靠譜APP開發(fā)公司的五個(gè)硬指標(biāo) 下一篇 → 當(dāng)排名第一也帶不來客戶:網(wǎng)站關(guān)鍵詞選擇的三個(gè)致命盲區(qū)