三方APP与微信小程序可完整跳转返回流程

流程背景:

目前使用的方案中三方APP跳转微信小程序,有两种,一种是直接在微信后台管理中 生成固定的scheme,另一种是调用后端提供的接口,动态生成跳转地址,支持传参等;两种方式都不支持回跳到来源APP中,即有去无回;
同一微信开放平台帐号下 的移动应用,通过微信官方提供的API可进行拉取小程序的功能权限,并且在该场景下,微信小程序通过调用对应API可返回原移动应用,即有去有回

以上流程已经进行过成功测试试验

IOS案例:

  1. 开发前需要下载iOS开发工具包
  2. 代码接入
WXLaunchMiniProgramReq *launchMiniProgramReq = [WXLaunchMiniProgramReq object];
launchMiniProgramReq.userName = userName;  //拉起的小程序的username
launchMiniProgramReq.path = path;    拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
launchMiniProgramReq.miniProgramType = miniProgramType; //拉起小程序的类型
return  [WXApi sendReq:launchMiniProgramReq];

回调说明

-(void)onResp:(BaseResp *)resp 
{if ([resp isKindOfClass:[WXLaunchMiniProgramResp class]]){NSString *string = resp.extMsg;// 对应JsApi navigateBackApplication中的extraData字段数据}
}

详情参考: iOS开发示例

iOS基本没多大问题,确认保证在同一公众平台账号下,基本不会遇到多大问题。

Android案例

  1. 开发前需要下载iOS开发工具包
  2. 代码接入
String appId = "wxd930ea5d5a258f4f"; // 填移动应用(App)的 AppId,非小程序的 AppID
IWXAPI api = WXAPIFactory.createWXAPI(context, appId);WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();
req.userName = "gh_d43f693ca31f"; // 填小程序原始id
req.path = path;                  拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;// 可选打开 开发版,体验版和正式版
api.sendReq(req);

回调说明

WXEntryActivity中

public void onResp(BaseResp resp) {if (resp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) resp;String extraData =launchMiniProResp.extMsg; //对应小程序组件 

详情参考:Android案例

坑较多,比较长遇到的就是app正常跳转到小程序,但是小程序点击按钮后无法返回app。

坑1:AndroidManifest.xml的配置

//在AndroidManifest.xml的WXEntryActivity中加入如下属性:
android:taskAffinity="your packagename"
android:launchMode="singleTask" 

这里如果不加的话,小程序无法跳转回APP

坑2:WXEntryActivity实现IWXAPIEventHandler接口

public class WXEntryActivity extends Activity implements IWXAPIEventHandler

坑3:在onResp里面finish,不然WXEntryActivity是透明的,导致app无法操作

public void onResp(BaseResp resp) {if (resp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) resp;String extraData = launchMiniProResp.extMsg; //对应小程序组件 

填坑5:在onCreate处理返回值

// IWXAPI 是第三方app和微信通信的openapi接口
private IWXAPI api;
@Override
protected void onCreate(Bundle bundle) {super.onCreate(bundle);// 通过WXAPIFactory工厂,获取IWXAPI的实例api = WXAPIFactory.createWXAPI(this, Constants.APP_ID, false);//注意://第三方开发者如果使用透明界面来实现WXEntryActivity,需要判断handleIntent的返回值,如果返回值为false,则说明入参不合法未被SDK处理,应finish当前透明界面,避免外部通过传递非法参数的Intent导致停留在透明界面,引起用户的疑惑try {if (!api.handleIntent(getIntent(), this)) {finish();}} catch (Exception e) {e.printStackTrace();}
}

小程序跳回

  1. 支持场景值为1069
    • 从其他小程序返回小程序(场景值1038)时(基础库 2.2.4 及以上版本支持)
    • 小程序从聊天顶部场景(场景值1089)中的「最近使用」内打开时
    • 长按小程序右上角菜单唤出最近使用历史(场景值1090)打开时
    • 发现栏小程序主入口,「最近使用」列表(场景值1001)打开时(基础库2.17.3及以上版本支持)
    • 浮窗(场景值1131、1187)打开时(基础库2.17.3及以上版本支持)
  1. 使用button组件,open-type 的值设置为 launchApp。如果需要在打开 APP 时向 APP 传递参数,可以设置 app-parameter 为要传递的参数。通过 binderror 可以监听打开 APP 的错误事件。
    //xml
    //js 
    Page({launchAppSuccess(e) {console.log('success', e);wx.showModal({title: 'success',content: JSON.stringify(e)})},launchAppError (e) {console.log(e.detail.errMsg);wx.showModal({title: 'error',content: e.detail.errMsg,})},
    })

若有收获,就点个赞吧


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部