在同一开放平台账号下的移动应用及小程序无需关联即可完成跳转,非同一开放平台账号下的小程序需与移动应用(APP)成功关联后才支持跳转。
可在“管理中心-移动应用-应用详情-关联小程序信息”,为通过审核的移动应用发起关联小程序操作。
拉起
App打开下程序有两种方式:
1、通过App分享小程序卡片到微信,然后在微信上点击小程序卡片打开小程序,这时小程序也可以打开App
• 第一步:你需要到微信开放平台 将你的app 关联上你的小程序!
• 第二步:你工程中需要导入有 wechatOpenSDK
• 第三步: 分享小程序卡片类型
2、通过App主动的调用 api 打开小程序,这时候小程序也可以打开App
回调
当小程序从 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唤起小程序