简介
大家好!我是Tony,一个热爱技术,希望运用技术改变生活的的追梦男孩。闲话不多说,今天总结一下小程序与微信公众号、原生app的交互能力。主要包括一下内容:
- 从公众平台跳转至小程序
- 从小程序跳转至原生app
- 原生app跳转至小程序
- 从公众平台跳转至原生App
从公众平台跳转至小程序
在微信官方文档->公众号->自定义菜单->事件推送->点击菜单跳转小程序的事件推送
推送XML数据包示例:
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[view_miniprogram]]></Event>
<EventKey><![CDATA[pages/index/index]]></EventKey>
<MenuId>MENUID</MenuId>
</xml>
参数说明:
- ToUserName 开发者 微信号
- FromUserName 发送方帐号(一个OpenID)
- CreateTime 消息创建时间 (整型)
- MsgType 消息类型,event
- Event 事件类型,view_miniprogram
- EventKey 事件KEY值,跳转的小程序路径
- MenuID 菜单ID,如果是个性化菜单,则可以通过这个字段,知道是哪个规则的菜单被点击了
从小程序跳转至原生app
在微信官方文档->小程序->打开app
小程序打开原生app的限制比较多,与其说是打开原生app,不如说是回跳原生app,具体可见腾讯文档。
从公众平台跳转至原生App
方法一:引导用户通过内置的浏览器打开native App
方法二:腾讯应用包,前提上架应用宝(android)
方法三:deephsare,可以从微信直接打开app,目前很多知名app都在使用这个方法,不过要付费使用
浏览器唤起原生App的爬坑教程
原生app打开微信小程序
在微信官方文档->开放平台->app拉取小程序的功能
演示了原生app如何调起微信小程序的能力,代码如下:
Android端开发前需要引入SDK
代码如下:
String appId = "wxd930ea5d5a258f4f"; // 填应用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);
//回调说明
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 属性
}
}
开发前需下载iOS开发工具包SDK
实例代码如下:
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字段数据
}
}