小程序已悄悄的開放了從外部跳轉(zhuǎn)至小程序的入口,方便用戶可以在微信外部瀏覽器或其他APP跳轉(zhuǎn)至微信小程序。
大家先來體驗一把 試一下爽不爽
方法一:通過小程序scheme碼跳轉(zhuǎn)至小程序
優(yōu)勢:目前最優(yōu)方案,所有場景都支持跳轉(zhuǎn)至小程序,為你實現(xiàn)外部流量導(dǎo)入小程序
缺點:需要注冊微信開放平臺,申請第三方平臺,然后利用接口獲取URL Scheme,步驟比較多
通過服務(wù)端接口可以獲取打開小程序任意頁面的URL Scheme。適用于從短信、郵件、微信外網(wǎng)頁等場景打開小程序。通過URL
·?1?播放
Scheme打開小程序的場景值為 1065。生成的URL Scheme如下所示:weixin://dl/business/?t= *TICKET*iOS系統(tǒng)支持識別URL Scheme,可在短信等應(yīng)用場景中直接通過Scheme跳轉(zhuǎn)小程序。Android系統(tǒng)不支持直接識別URL Scheme,用戶無法通過Scheme正常打開小程序,開發(fā)者需要使用H5頁面中轉(zhuǎn),再跳轉(zhuǎn)到Scheme實現(xiàn)打開小程序,跳轉(zhuǎn)代碼示例如下:location.href = 'weixin://dl/business/?t= *TICKET*'該跳轉(zhuǎn)方法可以在用戶打開H5時立即調(diào)用,也可以在用戶觸發(fā)事件后調(diào)用。調(diào)用上限Scheme將根據(jù)是否為到期有效與失效時間參數(shù),分為短期有效Scheme與長期有效Scheme:
單個小程序每日生成Scheme上限為50萬個(包含短期有效Scheme與長期有效Scheme)
有效時間超過31天的Scheme或永久有效的Scheme為長期有效Scheme,單個小程序總共可生成長期有效Scheme上限為10萬個,請謹(jǐn)慎調(diào)用
有效時間不超過31天的Scheme為短期有效Scheme,單個小程序生成短期有效Scheme不設(shè)上限
注意事項
生成的URL Scheme僅支持從微信外打開小程序。微信內(nèi)的網(wǎng)頁如需打開小程序請使用微信開放標(biāo)簽-小程序跳轉(zhuǎn)按鈕,無公眾號也可以直接使用小程序身份開發(fā)網(wǎng)頁并免鑒權(quán)跳轉(zhuǎn)小程序,見云開發(fā)靜態(tài)網(wǎng)站跳轉(zhuǎn)小程序。符合開放范圍的小程序可以下發(fā)支持打開小程序的短信。
該功能基本覆蓋當(dāng)前用戶正在使用的微信版本,開發(fā)者無需進行低版本兼容。
只能生成已發(fā)布的小程序的URL Scheme。
通過URL Scheme跳轉(zhuǎn)到微信時,可能會觸發(fā)系統(tǒng)彈框詢問,若用戶選擇不跳轉(zhuǎn),則無法打開小程序。請開發(fā)者妥善處理用戶選擇不跳轉(zhuǎn)的場景。
開放范圍針對國內(nèi)非個人主體小程序開放。VV直選IOS端就采用了URL Scheme跳轉(zhuǎn),大家可下載體驗。示例使用了云開發(fā)靜態(tài)網(wǎng)站托管搭建網(wǎng)頁,無需公眾號,只需準(zhǔn)備好小程序和開通云開發(fā)。網(wǎng)頁會判斷所在的環(huán)境來覺得采用哪種跳轉(zhuǎn)方式,如檢測到微信客戶端內(nèi),則免鑒權(quán)使用開放標(biāo)簽跳轉(zhuǎn),如檢測到在外部瀏覽器或 App,則使用 URL Scheme 跳轉(zhuǎn)小程序。示例網(wǎng)頁地址:https://postpay-2g5hm2oxbbb721a4-1258211818.tcloudbaseapp.com/jump-mp.html詳細(xì)代碼示例和說明:云開發(fā)靜態(tài)網(wǎng)站跳轉(zhuǎn)小程序。
方法二:云開發(fā)靜態(tài)網(wǎng)頁免鑒權(quán)跳轉(zhuǎn)靜態(tài)網(wǎng)站
優(yōu)勢:1、免去小程序業(yè)務(wù)域名的配置;2、云開發(fā)有免費的CDN額度;3、簡單粗暴,開發(fā)起來簡單、UI組件微信官方自帶,體驗好
缺點:一些排斥云開發(fā)的可能望而卻步
H5 跳小程序非個人主體并且已認(rèn)證的小程序,使用云開發(fā)靜態(tài)網(wǎng)站托管的網(wǎng)頁,可以免鑒權(quán)跳轉(zhuǎn)任意合法合規(guī)的小程序。即可以在微信內(nèi)部瀏覽器的 H5 跳轉(zhuǎn)小程序,也可以在微信外部瀏覽器或其他部分 App (如企業(yè)微信、QQ 等)跳轉(zhuǎn)微信小程序。靜態(tài)網(wǎng)站網(wǎng)頁在微信客戶端打開時,wx.config 可以傳入小程序 AppID 并且不需計算簽名,也就是免鑒權(quán)即可使用跳轉(zhuǎn)小程序的能力。點此體驗(將會跳轉(zhuǎn)到微信官方的 "小程序示例" 小程序):https://postpay-2g5hm2oxbbb721a4-1258211818.tcloudbaseapp.com/jump-mp.html
注意,開通靜態(tài)網(wǎng)站、綁定自定義域名,需要在「微信開發(fā)者工具 - 云開發(fā) - 更多 - 靜態(tài)網(wǎng)站」里進行,才能擁有免鑒權(quán)的能力。以下包含完整代碼示例,包括 HTML 代碼和云函數(shù)代碼。示例無需準(zhǔn)備公眾號,只需準(zhǔn)備好小程序和開通云開發(fā)以及云開發(fā)中的靜態(tài)網(wǎng)站托管能力。網(wǎng)頁會判斷所在的環(huán)境來覺得采用哪種跳轉(zhuǎn)方式,如檢測到微信客戶端內(nèi),則免鑒權(quán)使用開放標(biāo)簽跳轉(zhuǎn),如檢測到在外部瀏覽器或 App,則使用 URL Scheme 跳轉(zhuǎn)小程序。注意,以下代碼中有以下內(nèi)容必須替換,可以搜索 <!-- replace --> 查看到所有需要替換的地方:
小程序 AppID:填入你的小程序 AppID
云開發(fā)環(huán)境 ID:填入你的開通了靜態(tài)網(wǎng)站托管的云開發(fā)環(huán)境 ID
小程序原始賬號 ID:填入你的小程序原始賬號 ID(gh_ 開頭)
小程序頁面路徑:填入要跳轉(zhuǎn)到的小程序的頁面路徑
小程序名稱:填入要跳轉(zhuǎn)到的小程序名稱
HTML:?點擊下載
<html>? <head>? ? <title>打開小程序</title>? ? <meta http-equiv="Content-Type"content="text/html; charset=utf-8">? ? <meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1">? ? <script>? ? ? window.onerror=e=> {? ? ? ? console.error(e)? ? ? ? alert('發(fā)生錯誤'+ e)? ? ? }? ? </script>? ? <!-- weui 樣式 -->? ? <link rel="stylesheet"></link>? ? <!-- 調(diào)試用的移動端 console -->? ? <!-- <script src="https://cdn.jsdelivr.net/npm/eruda"></script> -->? ? <!-- <script>eruda.init();</script> -->? ? <!-- 公眾號 JSSDK -->? ? <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>? ? <!-- 云開發(fā) Web SDK -->? ? <script src="https://res.wx.qq.com/open/js/cloudbase/1.1.0/cloud.js"></script>? ? <script>? ? ? functiondocReady(fn) {? ? ? ? if (document.readyState ==='complete'|| document.readyState ==='interactive') {? ? ? ? ? fn()? ? ? ? } else {? ? ? ? ? document.addEventListener('DOMContentLoaded', fn);? ? ? ? }? ? ? }? ? ? docReady(asyncfunction() {? ? ? ? var ua = navigator.userAgent.toLowerCase()? ? ? ? varisWXWork=ua.match(/wxwork/i)=='wxwork'varisWeixin=!isWXWork&&ua.match(/micromessenger/i)=='micromessenger'varisMobile=falsevarisDesktop=falseif(navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|IEMobile)/i)) {? ? ? ? ? isMobile=true? ? ? }else{? ? ? ? ? isDesktop=true? ? ? }? ? ? ? if(isWeixin) {? ? ? ? ? varcontainerEl=document.getElementById('wechat-web-container')? ? ? ? ? containerEl.classList.remove('hidden')? ? ? ? ? containerEl.classList.add('full','wechat-web-container')? ? ? ? ? varlaunchBtn=document.getElementById('launch-btn')? ? ? ? ? launchBtn.addEventListener('ready',function(e) {? ? ? ? ? ? console.log('開放標(biāo)簽 ready')? ? ? ? ? })? ? ? ? ? launchBtn.addEventListener('launch',function(e) {? ? ? ? ? ? console.log('開放標(biāo)簽 success')? ? ? ? ? })? ? ? ? ? launchBtn.addEventListener('error',function(e) {? ? ? ? ? ? console.log('開放標(biāo)簽 fail', e.detail)? ? ? ? ? })? ? ? ? ? wx.config({? ? ? ? ? ? // debug: true, // 調(diào)試時可開啟? ? ? ? ? appId:'小程序 AppID',// <!-- replace -->? ? ? ? ? timestamp:0,// 必填,填任意數(shù)字即可? ? ? ? ? nonceStr:'nonceStr',// 必填,填任意非空字符串即可? ? ? ? ? signature:'signature',// 必填,填任意非空字符串即可? ? ? ? ? jsApiList: ['chooseImage'],// 必填,隨意一個接口即可? ? ? ? ? openTagList:['wx-open-launch-weapp'],// 填入打開小程序的開放標(biāo)簽名? ? ? ? })? ? ? ? }elseif(isDesktop) {? ? ? ? ? // 在 pc 上則給提示引導(dǎo)到手機端打開varcontainerEl=document.getElementById('desktop-web-container')? ? ? ? ? containerEl.classList.remove('hidden')? ? ? ? ? containerEl.classList.add('full','desktop-web-container')? ? ? ? }? else{? ? ? ? ? varcontainerEl=document.getElementById('public-web-container')? ? ? ? ? containerEl.classList.remove('hidden')? ? ? ? ? containerEl.classList.add('full','public-web-container')? ? ? ? ? varc=newcloud.Cloud({? ? ? ? ? ? // 必填,表示是未登錄模式? ? ? ? ? identityless:true,? ? ? ? ? ? // 資源方 AppID? ? ? ? ? resourceAppid:'小程序 AppID',// <!-- replace -->// 資源方環(huán)境 ID? ? ? ? ? resourceEnv:'云開發(fā)環(huán)境 ID',// <!-- replace -->? ? ? ? })? ? ? ? ? awaitc.init()? ? ? ? ? window.c=c? ? ? ? ? varbuttonEl=document.getElementById('public-web-jump-button')? ? ? ? ? varbuttonLoadingEl=document.getElementById('public-web-jump-button-loading')? ? ? ? ? try{? ? ? ? ? ? awaitopenWeapp(()=>{? ? ? ? ? ? ? buttonEl.classList.remove('weui-btn_loading')? ? ? ? ? ? ? buttonLoadingEl.classList.add('hidden')? ? ? ? ? ? })? ? ? ? ? }catch(e) {? ? ? ? ? ? buttonEl.classList.remove('weui-btn_loading')? ? ? ? ? ? buttonLoadingEl.classList.add('hidden')? ? ? ? ? ? throwe? ? ? ? ? }? ? ? ? }? ? ? })? ? ? asyncfunctionopenWeapp(onBeforeJump) {? ? ? ? varc=window.c? ? ? ? constres=awaitc.callFunction({? ? ? ? ? name:'public',? ? ? ? ? data: {? ? ? ? ? ? action:'getUrlScheme',? ? ? ? ? },? ? ? ? })? ? ? ? console.warn(res)? ? ? ? if(onBeforeJump) {? ? ? ? ? onBeforeJump()? ? ? ? }? ? ? ? location.href=res.result.openlink? ? ? }? ? </script>? ? <style>? ? ? .hidden{? ? ? ? display: none;? ? ? }? ? ? .full{? ? ? ? position: absolute;? ? ? ? top: 0;? ? ? ? bottom: 0;? ? ? ? left: 0;? ? ? ? right: 0;? ? ? }? ? ? .public-web-container{? ? ? ? display: flex;? ? ? ? flex-direction: column;? ? ? ? align-items: center;? ? ? }? ? ? .public-web-container p{? ? ? ? position: absolute;? ? ? ? top: 40%;? ? ? }? ? ? .public-web-container a{? ? ? ? position: absolute;? ? ? ? bottom: 40%;? ? ? }? ? ? .wechat-web-container{? ? ? ? display: flex;? ? ? ? flex-direction: column;? ? ? ? align-items: center;? ? ? }? ? ? .wechat-web-container p{? ? ? ? position: absolute;? ? ? ? top: 40%;? ? ? }? ? ? .wechat-web-container wx-open-launch-weapp{? ? ? ? position: absolute;? ? ? ? bottom: 40%;? ? ? ? left: 0;? ? ? ? right: 0;? ? ? ? display: flex;? ? ? ? flex-direction: column;? ? ? ? align-items: center;? ? ? }? ? ? .desktop-web-container{? ? ? ? display: flex;? ? ? ? flex-direction: column;? ? ? ? align-items: center;? ? ? }? ? ? .desktop-web-container p{? ? ? ? position: absolute;? ? ? ? top: 40%;? ? ? }? ? </style>? </head>? <body>? ? <divclass="page full">? ? ? <divid="public-web-container"class="hidden">? ? ? ? <pclass="">正在打開 “填入你的小程序名稱”...</p><!-- replace -->? ? ? <aid="public-web-jump-button"href="javascript:"class="weui-btn weui-btn_primary weui-btn_loading"onclick="openWeapp()">? ? ? ? ? <spanid="public-web-jump-button-loading"class="weui-primary-loading weui-primary-loading_transparent"><iclass="weui-primary-loading__dot"></i></span>? ? ? ? ? 打開小程序? ? ? ? </a>? ? ? </div>? ? ? <divid="wechat-web-container"class="hidden">? ? ? ? <pclass="">點擊以下按鈕打開 “填入你的小程序名稱”</p><!-- replace --><!-- 跳轉(zhuǎn)小程序的開放標(biāo)簽。文檔 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html -->? ? ? <wx-open-launch-weappid="launch-btn"username="小程序原始賬號 ID(gh_ 開頭的)"path="要跳轉(zhuǎn)到的頁面路徑"><!-- replace -->? ? ? ? <template>? ? ? ? ? ? <buttonstyle="width: 200px;height: 45px;text-align: center;font-size: 17px;display: block;margin: 0 auto;padding: 8px 24px;border: none;border-radius: 4px;background-color: #07c160;color:#fff;">打開小程序</button>? ? ? ? ? </template>? ? ? ? </wx-open-launch-weapp>? ? ? </div>? ? ? <divid="desktop-web-container"class="hidden">? ? ? ? <pclass="">請在手機打開網(wǎng)頁鏈接</p>? ? ? </div>? ? </div>? </body> </html>云函數(shù) public: 點擊下載
新建一個云函數(shù),名為 public,然后將其 index.js 設(shè)為以下內(nèi)容:
在云開發(fā)控制臺中的設(shè)置 -> 權(quán)限設(shè)置中,將對應(yīng)開通了靜態(tài)網(wǎng)站的云環(huán)境開啟未登錄模式訪問
在云開發(fā)控制臺中的云函數(shù) -> 權(quán)限設(shè)置中,配置安全規(guī)則,選擇 “允許所有用戶訪問” 的模板并確認(rèn)。如果需要更安全的控制,即只讓 public 函數(shù)開啟未登錄訪問,可參見底部安全規(guī)則模板
// 云函數(shù)入口文件constcloud=require('wx-server-sdk') cloud.init()// 云函數(shù)入口函數(shù)exports.main=async(event,context)=>{? constwxContext=cloud.getWXContext()? switch(event.action) {? ? case'getUrlScheme': {? ? ? returngetUrlScheme(event.options)? ? }? }? return'action not found'}asyncfunctiongetUrlScheme(options) {? returncloud.openapi.urlscheme.generate({? ? jumpWxa: {? ? ? path:'/page/component/index',// <!-- replace -->? ? query:'',? ? },? ? // 如果想不過期則置為 false,并可以存到數(shù)據(jù)庫? isExpire:true,? ? // 一分鐘有效期? expireTime:parseInt(Date.now()/1000+60),? }) }可選的進階的云函數(shù)安全規(guī)則模板(只放開了讓 public 云函數(shù)支持未登錄訪問):{? "*":{? ? "invoke":"auth != null" },? "public":{? ? "invoke":true } }
小太陽的視頻
方法三:通過同一開放平臺綁定的APP拉起小程序
優(yōu)勢:只要綁定在同一開發(fā)賬號下,無需再配置
缺點:僅對綁定的app才可實現(xiàn)微信外部跳轉(zhuǎn),網(wǎng)頁及其他app暫不不支持
大家可以申請認(rèn)證微信開放平臺,將app、小程序、網(wǎng)頁進行統(tǒng)一綁定。考慮到部分場景下 APP 需要通過小程序來承載服務(wù),為此 OpenSDK 提供了移動應(yīng)用(APP)拉起小程序功能。
移動應(yīng)用(APP)接入此功能后,用戶可以在 APP 中跳轉(zhuǎn)至微信某一小程序的指定頁面,完成服務(wù)后再跳回至原 APP 。移動應(yīng)用拉起小程序功能已向全體開發(fā)者開放,開發(fā)者在微信開放平臺帳號下申請移動應(yīng)用并通過審核后,即可獲得移動應(yīng)用拉起小程序功能權(quán)限。
跳轉(zhuǎn)規(guī)則:1、對于已通過認(rèn)證的開放平臺賬號,其移動應(yīng)用可以跳轉(zhuǎn)至任何合法的小程序,且不限制跳轉(zhuǎn)的小程序數(shù)量。2、對于未通過認(rèn)證的開放平臺賬號,其移動應(yīng)用僅可以跳轉(zhuǎn)至同一開放平臺賬號下小程序。注意:若移動應(yīng)用未上架,則最多只能跳轉(zhuǎn)小程序100次/天,用于滿足調(diào)試需求。優(yōu)點:無需前兩個方法的各種配置缺點:只適合同一個開放平臺的app跳轉(zhuǎn)至小程序,未綁定的其他app無法實現(xiàn)跳轉(zhuǎn),簡單地講,需要白名單APP才可跳轉(zhuǎn)。