在同一开放平台账号下的移动应用及小程序无需关联即可完成跳转,非同一开放平台账号下的小程序需与移动应用(APP)成功关联后才支持跳转。

可在“管理中心-移动应用-应用详情-关联小程序信息”,为通过审核的移动应用发起关联小程序操作。

拉起

App打开下程序有两种方式:

1、通过App分享小程序卡片到微信,然后在微信上点击小程序卡片打开小程序,这时小程序也可以打开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[1]

2、通过App主动的调用 api 打开小程序,这时候小程序也可以打开App

官方文档: https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=21526646385rK1Bs&token=&lang=zh_CN[2]

回调

当小程序从 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。 

<button class='server_button' open-type="launchApp" app-parameter="MemberId={{MemberId}}&MemberStatus={{MemberStatus}}" binderror="launchAppError">
     返回App
</button>

这样可以传参数给App

扩展

再下一步的需求是多个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
},

使用场景

1、APP 跳转微信小程序进行支付

目的:可以避开APP各种审核、避免APP高费率问题、有时小程序端有服务商收益

对接步骤:

 

1、APP端创建订单,带订单号和用户id参数吊起小程序指定页面

2、在小程序指定页面接收参数,用code换取openid, 携带参数请求后台接口发起支付,获取支付参数

3、小程序端携带支付参数调起微信支付,进行支付

4、支付完成点击“返回APP”按钮,跳转到APP

5、APP回调方法中接收到回调请求,验证订单支付状态,走后续逻辑

APP跳转小程序、APP唤起小程序

引用链接 

[1] https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317332&token=&lang=zh_CN:  https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317332&token=&lang=zh_CN

[2] https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=21526646385rK1Bs&token=&lang=zh_CN:  https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=21526646385rK1Bs&token=&lang=zh_CN