一、 功能需求说明
- APP启动小程序,同时将参数传入小程序中。
- 小程序启动APP,同时将参数传入到APP中。
二、 功能可行性调研结果
-
APP和小程序在满足以下条件时可在APP中启动小程序,并能将参数传入小程序
1) APP在“微信开放平台”进行了注册,且审核通过,拥有自己的APPID。
2) 必须在“微信开放平台”中将“微信小程序”和APP绑定。
3) 微信小程序必须是“体验版”或者“正式版”,拥有原始ID。
4) 如果微信小程序是“体验版”,则必须在“微信公众平台”将手机微信用户绑定成该小程序的“体验用户”。 -
小程序不能直接启动APP,而只能在满足以上1的所有条件的情况下并同时满足以下条件之一时具有返回APP的能力,并能将参数传入APP
1) 小程序是被APP启动的(场景值1069)。
2) 小程序时被APP分享到微信之后,在分享卡片中打开的(场景值1069)。
3) 小程序时被1)、2)两种情况打开的情况下,又从其他小程序返回该小程序(场景值1038)(微信基础库2.2.4及以上版本支持)。
4) 小程序时被1)2)两种情况打开的情况下,又从聊天顶部场景中的【最近使用】中打开(场景值1038)。
5) 小程序时被1)2)两种情况打开的情况下,又从长按小程序右上角菜单唤出最近使用历史中打开(场景值1038)。注:1.以上条件2)、3)、4)、5)都需要APP具有“分享小程序”功能的情况下才能完整认证,而APP具有“分享小程序”功能需要在“微信开放平台”中使用“企业开发账号”进行“开发者资质认证”。
三、 方案实施(Android)
-
准备工作
1) APP和小程序按照要求在“微信开放平台”和“微信公众平台”完成相应的注册和认证。
2) Android开发工具“AndroidStudio”,小程序开发工具“微信开发者工具”(微信公众平台下载)。 -
APP端代码实施
1) 配置微信SDK,添加以下依赖:(版本号可根据实际情况变化)
implementation ‘com.tencent.mm.opensdk:wechat-sdk-android-with-mta:5.1.6’2) 在清单配置文件中添加网络权限
3) 初始化微信接口实例:(以下代码见附件中的工具类ShareUtil.java)
initWechatShare(mAppContext, WX_APPLY_ID);参数说明: 1>mAppContext:传入Application对象. 2>WX_APPLY_ID:传入在APP在“微信开放平台”申请的APPID。4) APP启动小程序并传入参数
拼接路径和参数:
String path = "/pages/index/index?usrName=" + usrName +"&zabCount=" + zabCount + "&mxqCount=" + mxqCount; 参数说明: 1>usrName、zabCount、mxqCount:传入小程序的三个参数。(参数的数目不限,与APP端约定好即可) 2>传入小程序的参数只能用以上的格式拼接到path变量中。启动小程序(以下代码见附件中的工具类ShareUtil.java):
pullMiniPro(GlobalConstant.Wechat_SP_OR_ID, path, WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_PREVIEW);参数说明: 1>GlobalConstant.Wechat_SP_OR_ID:传入小程序在“微信公众平台”申请的原始ID。 2>path:启动小程序的路径及参数字符串 3>WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_PREVIEW:小程序的版本,此处是“体验版本”,还可以选择“正式版本”:“WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE”。5) APP接收小程序传入的参数
1>在项目中创建WXEntryActivity类,并在清单配置文件中进行以下配置: android:exported="true" android:launchMode="singleTask" 参数说明: launchMode还可以去“singleTop”值。 2>WXEntryActivity类继承IWXAPIEventHandler接口,实现其“public void onResp(BaseResp baseResp)”方法,对baseResp进行解析即可得到小程序传入的参数。(具体解析过程按照APP和小程序约定好的数据格式即可) 3>注册微信回调接口:(以下代码见附件中的工具类ShareUtil.java) getIwxapi(getApplicationContext(), GlobalConstant.WX_APPLY_ID) .handleIntent(getIntent(), this); 参数说明: a.getApplicationContext():获取当前项目的Application对象。 b.GlobalConstant.WX_APPLY_ID:传入在APP在“微信开放平台”申请的APPID。 c.this:WXEntryActivity的实例对象。 -
小程序端代码实施
1) 小程序接收APP传入的参数
1>app.js文件中 App({ appData: '', onShow(options) { this.appData = options console.log('App Show', options) }, } 参数说明: a.options:小程序接收到的外部参数对象,其中包含有APP传入的参数字段。 b.appData:全部变量,用来保存options对象,供其它页面使用。 2>展示数据的页面对应的.js文件中处理数据 onShow: function () { var usrName = app.appData.query.usrName var zabCount = app.appData.query.zabCount var mxqCount = app.appData.query.mxqCount } 参数说明: usrName、zabCount、mxqCount即APP传入的三个参数。(参数的数目不限,与APP端约定好即可)2) 小程序返回APP并传入参数
注:2. 小程序不能自动返回APP,需要用户手动触发返回动作。
1>触发返回APP动作的页面对应的.wxml中 <button open-type="launchApp" app-parameter="{'key1': {{fd_input1}},'key2':{{fd_input2}}}" binderror="launchAppError"> 打开APP </button> 参数说明: a.必须有这样一个button用于触发“返回APP”的操作。 b.必须声明“open-type="launchApp"”。 c.app-parameter用于存放传递给APP的参数,此处实例中与APP约定的是JSON字符串,包含有“'key1'”和“'key2'”两个参数。(参数也不限于两个,与APP端约定好即可) d.fd_input1和fd_input2是该页面的两个字符输入控件,也可以使用其他控件来进行参数输入。 e.binderror="launchAppError"声明“返回APP错误时的处理”。
浙公网安备 33010602011771号