自定义菜单的view类型(访问网页)

引言及内容概要

距离写上一篇文章《自定义菜单的创建及菜单事件响应》整整过了两个月的时间,那时公众平台还没有开放view类型的菜单。在不久前,微信公众平台悄悄开放了view类型的菜单,却没有在首页发布任何通知,貌似微信团队很喜欢这么干。一个偶然的机会,我留意到API文档的自定义菜单接口发生了变化,增加了对菜单view类型的说明:

view(访问网页):

用户点击view类型按钮后,会直接跳转到开发者指定的url中。

于是我在第一时间更新了小q机器人(微信号:xiaoqrobot)的菜单,在一级菜单“更多”下增加了二级菜单“使用帮助”,点击该菜单项会直接跳转到网页,如下图所示。

最近也有不少网友问起这种类型的菜单是如何创建的,本篇文章就为大家介绍下view类型的自定义菜单该如何创建。

自定义菜单的两种类型(click和view)

公众平台API文档中给出了自定义菜单的json结构示例,我从中截取两个菜单项的json代码,一个是click类型,,另一个是view类型,如下所示。

{"type":"click","name":"今日歌曲","key":"V1001_TODAY_MUSIC"},{"type":"view","name":"歌手简介","url":""}从上面可以看出,两种类型的菜单除了type值不同之外,属性也有差别。click类型的菜单有key属性,而view类型的菜单没有key属性,与之对应的是url属性。通过上一篇的学习我们知道,key值是用于判断用户点击了哪个click类型的菜单项。而view类型的菜单没有key属性,目前无法在公众账号后台判断是否有用户点击了view类型的菜单项,也就没办法知道哪个用户点击了view类型的菜单项。

建立view类型的菜单对象

View类型的菜单有3个属性:type、name和url。在上一篇文章中,我们创建了菜单项的基类Button,Button类只有一个属性name。View类型的菜单对象也需要继承Button类,代码如下:

package org.liufeng.weixin.pojo;/** * view类型的菜单 * * @author liuyq * @date 2013-04-10 */public class ViewButton extends Button {private String type;private String url;public String getType() {return type;}public void setType(String type) {this.type = type;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}}

创建带view类型的菜单示例

我们对前一篇文章中给出的菜单创建代码进行调整,增加view类型的菜单项,完整的菜单创建代码如下:

package org.liufeng.weixin.main;import org.liufeng.weixin.pojo.AccessToken;import org.liufeng.weixin.pojo.Button;import org.liufeng.weixin.pojo.CommonButton;import org.liufeng.weixin.pojo.ComplexButton;import org.liufeng.weixin.pojo.Menu;import org.liufeng.weixin.pojo.ViewButton;import org.liufeng.weixin.util.WeixinUtil;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * 菜单管理器类 * * @author liufeng * @date 2013-08-08 */public class MenuManager {private static Logger log = LoggerFactory.getLogger(MenuManager.class);public static void main(String[] args) {// 第三方用户唯一凭证String appId = "000000000000000000";// 第三方用户唯一凭证密钥String appSecret = "00000000000000000000000000000000";// 调用接口获取access_tokenAccessToken at = WeixinUtil.getAccessToken(appId, appSecret);if (null != at) {// 调用接口创建菜单int result = WeixinUtil.createMenu(getMenu(), at.getToken());// 判断菜单创建结果if (0 == result)log.info("菜单创建成功!");elselog.info("菜单创建失败,错误码:" + result);}}/** * 组装菜单数据 * * @return */private static Menu getMenu() {CommonButton btn11 = new CommonButton();btn11.setName("天气预报");btn11.setType("click");btn11.setKey("11");CommonButton btn12 = new CommonButton();btn12.setName("公交查询");btn12.setType("click");btn12.setKey("12");CommonButton btn13 = new CommonButton();btn13.setName("周边搜索");btn13.setType("click");btn13.setKey("13");CommonButton btn14 = new CommonButton();btn14.setName("历史上的今天");btn14.setType("click");btn14.setKey("14");CommonButton btn15 = new CommonButton();btn15.setName("电影排行榜");btn15.setType("click");btn15.setKey("32");CommonButton btn21 = new CommonButton();btn21.setName("歌曲点播");btn21.setType("click");btn21.setKey("21");CommonButton btn22 = new CommonButton();btn22.setName("经典游戏");btn22.setType("click");btn22.setKey("22");CommonButton btn23 = new CommonButton();btn23.setName("美女电台");btn23.setType("click");btn23.setKey("23");CommonButton btn24 = new CommonButton();btn24.setName("人脸识别");btn24.setType("click");btn24.setKey("24");CommonButton btn25 = new CommonButton();btn25.setName("聊天唠嗑");btn25.setType("click");btn25.setKey("25");CommonButton btn31 = new CommonButton();btn31.setName("Q友圈");btn31.setType("click");btn31.setKey("31");CommonButton btn33 = new CommonButton();btn33.setName("幽默笑话");btn33.setType("click");btn33.setKey("33");CommonButton btn34 = new CommonButton();btn34.setName("用户反馈");btn34.setType("click");btn34.setKey("34");CommonButton btn35 = new CommonButton();btn35.setName("关于我们");btn35.setType("click");btn35.setKey("35");ViewButton btn32 = new ViewButton();btn32.setName("使用帮助");btn32.setType("view");btn32.setUrl("");ComplexButton mainBtn1 = new ComplexButton();mainBtn1.setName("生活助手");mainBtn1.setSub_button(new Button[] { btn11, btn12, btn13, btn14, btn15 });ComplexButton mainBtn2 = new ComplexButton();mainBtn2.setName("休闲驿站");mainBtn2.setSub_button(new Button[] { btn21, btn22, btn23, btn24, btn25 });ComplexButton mainBtn3 = new ComplexButton();mainBtn3.setName("更多");mainBtn3.setSub_button(new Button[] { btn31, btn33, btn34, btn35, btn32 });/** * 这是公众号xiaoqrobot目前的菜单结构,每个一级菜单都有二级菜单项<br> ** 在某个一级菜单下没有二级菜单的情况,menu该如何定义呢?<br> * 比如,第三个一级菜单项不是“更多体验”,而直接是“幽默笑话”,那么menu应该这样定义:<br> * menu.setButton(new Button[] { mainBtn1, mainBtn2, btn33 }); */Menu menu = new Menu();menu.setButton(new Button[] { mainBtn1, mainBtn2, mainBtn3 });return menu;}}

119~122行代码就是用于创建view类型菜单项的。上面的菜单结构也是小q机器人(微信号:xiaoqrobot)目前在使用的,读者可以对照着理解。

要想捉大鱼,不能怕水深。要想摘玫瑰,就得不怕刺。

自定义菜单的view类型(访问网页)

相关文章:

你感兴趣的文章:

标签云: