三方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; //对应小程序组件 <button open-type="launchApp"> 中的 app-parameter 属性
    }
}

详情参考: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; //对应小程序组件 <button open-type="launchApp"> 中的 app-parameter 属性
    LogUtils.i("小程序==" + extraData);
    finish();
  }
}

填坑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
    <button open-type="launchApp" app-parameter="wechat" bindlaunchapp="launchAppSuccess" binderror="launchAppError">打开APP</button>
    
    
    //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,
        })
      },
    })

若有收获,就点个赞吧

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值