App打開微信小程序並傳遞參數

在App中打開小程序的功能發佈有一段時間了,網上關於這個的新聞很多,但是技術資料並不多,我們有項目需要嘗試這種方式,特意試了一下,發現還是有一些坑,分享給大家。

App打開微信小程序並傳遞參數

image.png

一. 開發前先得做好幾個準備工作:

  1. 在微信開放平臺上有賬號而且有通過的移動應用。
App打開微信小程序並傳遞參數


  1. image.png
  2. 在微信公眾平臺有賬號而且有小程序,最好發佈為體驗版本
App打開微信小程序並傳遞參數


  1. image.png
  2. 在微信開放平臺把對應的移動應用和小程序建立關聯。這個過程來回需要登陸和掃二維碼n次。
App打開微信小程序並傳遞參數

image.png

二. 在android和ios調試官方sample打開小程序

App打開微信小程序並傳遞參數

image.png

打開小程序的核心代碼不多,裡面有幾個參數必須設置正確

String appId = "wxd930ea5d5a258f4f"; // 填應用AppIdIWXAPI api = WXAPIFactory.createWXAPI(context, appId);WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();req.userName = "gh_d43f693ca31f"; // 填小程序原始idreq.path = path; //拉起小程序頁面的可帶參路徑,不填默認拉起小程序首頁req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;// 可選打開 開發版,體驗版和正式版api.sendReq(req);

上面幾個參數再詳細說一下:

  • appId指的是微信開放平臺對應移動應用的appId,而不是小程序的appId,這裡注意
  • userName是微信公眾平臺裡小程序的原始Id,是gh開頭的。
App打開微信小程序並傳遞參數


  • image.png
  • req.path就是打開小程序的路徑,傳遞參數就是通過這個來傳遞,但是文檔上並沒有說,試出來的。
req.path="page/index?key1=xxx&key2=yyy";//類似http的url方法來傳遞參數

*req.miniprogramType選的是開發和體驗版本,正式版本的小程序沒有測試過。

ios和android類似,不再細說。

3. 在小程序端接受App傳遞過來的參數

上面的App打開的path是'path/index',所以需要把App的onLaunch事件定義在page/index.js上

App打開微信小程序並傳遞參數

image.png

這裡的options.scene是1069,這個場景id表示從app打開。

options.query.key1和options.query.key2就是app打開小程序傳遞的參數。

4. 關閉小程序回到App並傳遞數據

//小程序端通過navigateBackApplication來關閉f1: function (e) { wx.navigateBackApplication({ "extraData":"傳遞到app的數據" })}

Android和iOS通過一個回調函數來接受這個參數:

public void onResp(BaseResp resp) { if (resp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) { WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) resp; String extraData =launchMiniProResp.extMsg; // 對應JsApi navigateBackApplication中的extraData字段數據 }}

也就是在小程序端現在必須這麼寫:

//小程序端通過navigateBackApplication來關閉f1: function (e) { if(在android下){//wx.getSystemInfo wx.navigateBackApplication({ "extraData":{key:"傳遞到app的數據"} }) else{ wx.navigateBackApplication({ "extraData":"傳遞到app的數據" }) }}

大概過程就是這樣,能在app裡打開小程序而且還能傳遞參數這個功能還是非常有用的,小程序和app很多共通的功能可以只實現一套小程序就可以了。


分享到:


相關文章: