在同一開放平台賬號下的移動應用及小程序無需關聯即可完成跳轉,非同一開放平台賬號下的小程序需與移動應用(APP)成功關聯后才支持跳轉。
可在“管理中心-移動應用-應用詳情-關聯小程序信息”,為通過審核的移動應用發起關聯小程序操作。
喚起
App打開下程序他有兩種方式:
1,通過App分享小程序卡片 到微信,然后在微信上點擊小程序卡片打開小程序,這是小程序也可以打開App
第二步:你工程中需要導入有 wechatOpenSDK
第三步: 分享小程序卡片類型
官方文檔: https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317332&token=&lang=zh_CN
第一種:文字類型分享示例 SendMessageToWXReq *req = [[SendMessageToWXReq alloc]init]; req.text = @"分享內容"; req.bText = YES; req.scene = WXSceneSession; // 目前只支持會話形式 [WXApi sendReq:req]; 第二種:App 主動分享小程序卡片:⚠️ 小程序測試版不能分享 WXMiniProgramObject *wxminiObiect = [WXMiniProgramObject object]; wxminiObiect.webpageUrl = webpageUrl; //兼容低版本的網絡鏈接 wxminiObiect.userName = userName;//小程序的原始ID wxminiObiect.path = path;// 指定打開小程序的某一個頁面的URL路徑 wxminiObiect.hdImageData = hdImageData; //小程序節點高清大圖,小於128K WXMediaMessage *message = [WXMediaMessage message]; message.title = @"小程序title"; message.description = @"小程序description"; message.mediaObject = wxminiObiect; message.thumbData = nil; // 兼容舊版本節點的圖片,小於32k,新版本優先 SendMessageToWXReq *req = [[SendMessageToWXReq alloc]init]; req.message = message; req.scene = WXSceneSession; // 目前只支持會話 return [WXApi sendReq:req];
2,通過App主動的調用api 打開小程序,這時候小程序也可以打開App
WXLaunchMiniProgramReq *launchMiniProgramReq = [WXLaunchMiniProgramReq object]; launchMiniProgramReq.userName = @"gh_3413cfa14bae"; //拉起的小程序的原始ID launchMiniProgramReq.path = @"pages/index/index"; //拉起小程序頁面的可帶參路徑,不填默認拉起小程序首頁 launchMiniProgramReq.miniProgramType = WXMiniProgramTypeRelease; //拉起小程序的類型 [WXApi sendReq:launchMiniProgramReq];
//或者 String appId = "wxd930ea5d5a258f4f"; // 填應用AppId IWXAPI api = WXAPIFactory.createWXAPI(context, appId); WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req(); req.userName = "gh_d43f693ca31f"; // 填小程序原始id req.path = path; //拉起小程序頁面的可帶參路徑,不填默認拉起小程序首頁 req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE; // 可選打開 開發版,體驗版和正式版 api.sendReq(req);
WXMiniProgramTypeRelease 正式版 WXMiniProgramTypeTest 開發版 WXMiniProgramTypePreview 體驗版
回調
當小程序從 APP 分享消息卡片的場景打開(場景值 1036,APP 分享小程序文檔 iOS / Android) 或從 APP 打開的場景打開時(場景值 1069),小程序會獲得打開 APP 的能力,此時用戶點擊按鈕可以打開分享該小程序卡片/拉起該小程序的 APP。即小程序不能打開任意 APP,只能 跳回 APP。
options.scene是1036,這個場景id表示app分享。
options.scene是1069,這個場景id表示從app打開。
按微信文檔中描述,從小程序中跳回App只能通過點擊小程序中的按鈕方可跳回,如何實現點擊按鈕跳回App,並攜帶參數呢,需如下兩步
App端:
需要創建WXEntryActivty,實現IWXAPIEventHandler接口,重寫onResp方法。注意Acitvity需要在Manifest文件中聲明 android:exported="true",這樣才可以被外部喚起
public void onResp(BaseResp resp) { if (resp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) { WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) resp; String extraData =launchMiniProResp.extMsg; // 對應下面小程序中的app-parameter字段的value } }
小程序端:
需要將 <button> 組件 open-type 的值設置為 launchApp。如果需要在打開 APP 時向 APP 傳遞參數,可以設置 app-parameter 為要傳遞的參數。通過 binderror 可以監聽打開 APP 的錯誤事件。
<view class='suspension'> <button class="server_button" open-type="launchApp" app-parameter="wechat" binderror="launchAppError">打開APP</button> </view>
這樣App拿到的內容就是wechat。
擴展
再下一步的需求是多個App跳轉一個小程序,再分別返回不同的App;一個App跳轉不同的小程序,接受不同的返回內容。
從App拉起小程序頁面的路徑是可以帶參數的,我們就利用這個參數判斷是從那個App跳到小程序的。
例如:
名稱為a的App跳轉路徑為:
"pages/index/index?type=appA"
名稱為b的App跳轉路徑為:
"pages/index/index?type=appB"
小程序端接收參數:
onLoad: function (options) { console.log(options.type); //app傳遞過來的參數 可以判斷a或者b },