目录
一、引言
二、研究意义
三、国内外研究现状及难点
四、系统通用结构
五、系统实现技术方法研究
六、总结与展望
参考文献
摘要: 本文是关于基于 WxJava 框架的集客微信公众号的设计与实现的一篇文献综述,先介绍项目的由来及其研究意义,然后介绍项目的国内外研究现状及难点 以定位项目开发的一个大环境,明确当前同类项目的研究情况。接着本文简述开发公众号系统的通用系统结构与开发框架,紧接着介绍系统开发中需要运用的关键技术。
关键词: 微信,公众号,社交,Spring,朋友圈,网页开发
一、引言
社交软件越来越流行,并对每个人的生活和工作都造成了非常大的影响[1],人们习惯于在社交软件上获取知识、交流互动。微信作为中国社交软件典型代表,迅速成为人们日常生活中不可或缺的一部分。根据腾讯 2019Q3 财报[2] 显示,微信的月活跃用户群达到了 11.51 亿。微信中有两大重要组成模块:公众号和朋友圈。
微信公众号作为用户获取知识和关注热点的重要平台,目前已经诞生了 88.5 万个[3];而微信朋友圈则是为用户提供分享知识和交流互动功能的虚拟社区[4]。
微信朋友圈的流行,也赋予了其新的价值。随着移动互联网的普及,微信朋友圈可以促进社会资本的积累和增长[4]。朋友圈将现实中的社交网络演变成为虚拟空间,使得那些具有共同兴趣爱好的人们实现了跨距离的互动,并且为营销提供了新渠道。但朋友圈始终没有开发出一种功能,可以让用户看到朋友圈的浏览记录。对于那些渴望社交的用户而言,他们希望可以了解到谁浏览了他的朋友圈,从而进行深入的沟通[5]。微信本身没有访客记录该项功能,为了提高社交效率和范围, 迫切需要开发出一个可以浏览访客记录并且能够获取访客关系网的系统。基于WxJava 的集客公众号的实现可以帮助用户收集朋友圈访客信息和记录,帮助用户构建共同兴趣爱好的好友圈,上述功能可以为销售人员提供更精准的营销手段和更高效的社交方式。
二、研究意义
朋友圈的流行,为人们提供了新的社交机会和营销手段[6]。“集客”意为收集访客信息,构建访客关系网,将有共同兴趣爱好的访客集中在一个虚拟社区中。集 客微信公众号基于公众号平台为用户提供了热点资讯、访客记录、社交关系网等强 大功能。用户通过分享或阅读符合朋友圈共同兴趣的热点资讯,可以获得社交满足和功利满足[7]。除此之外,当其他用户阅读了转发的热点资讯,可能希望通过分享、点赞或评论来表明自己此时的情绪状态和想法等,这对人际关系的加强也有帮 助[8]。不仅如此,用户还可以第一时间了解到浏览记录和访客的信息,得知与其有共同话题或兴趣的好友,提高用户的社交效率,提供更多的社交机会。
三、国内外研究现状及难点
在国外,社交软件的知识或信息分享已成常态,社交软件例如 Facebook 和wiki,都为个人的知识寻求活动赋予了权力。在这里,人们可以实现各种信息寻求目标,访问网络所提供的各种信息服务。在网络空间中,知识寻求者可以相互联系,并访问超出其地理范围的内部和外部知识[9]。社交软件为世界各地的知识寻 求者提供了一种在他们的网络中提问或回答问题的方式,并寻求其他具有类似兴趣的人。微信的公众号也同样具有分享知识的功能,但微信公众号的局限在于无法准确知道那些具有类似兴趣的好友,因为有一些用户只是习惯性地阅读文章,但 不会进行点赞和评论[7]。而用户知道谁阅读了他的文章是非常重要的功能,可以 让用户扩展他的社交网络,结交那些基于某种共同的兴趣或话题而形成的朋友。
除此之外,微信作为社交媒体,同样具备营销手段。国外研究表明,媒体和营销研究人员可以利用社交软件来满足客户的社会需求,包括洞察客户的情况、寻找 对话和社会互动、替代现实生活中的友谊,帮助履行社会角色[6]。研究表明,微信 营销已经成为必备的营销手段之一[10]。微信营销内容在微信的好友圈里的传播能使信息本身的信赖度得到提升,并且可以每时每刻地通过手机进行信息交换、体 验分享,增加微信营销内容的覆盖范围;凭借手机的便携性和网络的传播性,营销活动可以解脱时空的束缚,更有助于提高营销的效果[10]。现阶段,微信营销的主要痛点在于微信朋友圈的的具体数据无法实时获取,销售无法得知访客的信息,不 能了解哪些访客正潜在关注我的朋友圈以及访客的兴趣关注点。如果能够给营销
人员提供访客信息与访客关注点,他们就能够精准地向某些对用户朋友圈感兴趣的访客进行营销。因此在微信中收集访客信息,了解访客关注点,集中有价值的访 客进行社交便为“集客”的最终目的。
现阶段,国内有许多社交软件拥有“集客”的功能,例如 QQ 空间,就为用户提供了谁进入过空间、具体谁阅读过文章、谁转发过文章的功能,并且深受用户好评[11]。微信中也有一些可以收集到朋友圈访客记录的公众号,例如“客集集”公众 号,用户可以从公众号中转发自己感兴趣的文章链接,好友在阅读文章后,用户便能第一时间看见谁访问过该文章。但是“客集集”公众号的关注点主要在于文章 的分享中,将文章的内容作为重心,而缺少获取访客的具体信息、共同关注度、好友 关系网的功能。这将大大减少用户对访客的认知,用户无法得知每个访客的阅读信息、关注度,缺少对好友关系网的扩展。
WxJava 是微信团队推出的微信开发 SDK,为开发者提供了丰富的微信公众号、小程序功能接口,目前 WxJava 框架已经非常成熟,许多知名公众号均采用WxJava 来开发公众号,例如中国电信上海网厅、洽洽企业号、神龙养车等等[12]。WxJava 主要在消息管理、菜单管理、公众号配置方面提供了相应的功能,但对获取用户信息、构建用户关系网方面还缺少相应接口,因此系统的实现难点在于需要通过 WxJava 已提供的接口,对实现获取用户信息方面进行二次开发。
目前该领域的主要难点有:基于 WxJava,针对用户日益需要的朋友圈浏览记录数据化和信息寻求需求,开发出一款适合微信用户的公众号平台。同时,能够满 足数据的安全性、数据的远程传输、权限系统和系统数据备份。并且,可以实时推送热点资讯和专业知识文章,提供好友浏览记录并且能够根据用户的浏览和转发记录,分析出用户的好友网。除此之外,还需要保证系统能够承受大量用户的并发 请求,保证系统的稳定性和响应速度,并且系统框架应该是可扩展、易修改的。
四、系统通用结构
本公众号系统是基于 WxJava 的 B/S 架构 Web 项目[13],项目根据功能的不同将整体分解成不同的模块,并且定义了各个功能模块之间的接口,将各个模块连接成一个整体。模块化开发增加了可重用性,减少了重复工作,各个模块可以根据不同需求独立设计,提高开发效率。除此之外,项目的维护和更新也非常方便,只需对每个模块进行操作。基于各模块的功能分类,本系统分为三个模块,如图1所示。
图 1: 系统模块设计
用户子系统主要负责处理用户的一系列需求,是面向用户的子系统。利用用户子系统,我们可以实现与用户的良好交互,并且能够通过用户信息计算出用户的 兴趣爱好、共同好友等。用户子系统还可以为用户提供高效的个人信息服务,例如 储存、查询用户的个人信息,管理用户文章等。因此,用户子系统需要特别注意用户信息的安全性和完整性,保证用户的个人信息不被侵犯。
新闻子系统为公众号提供了一系列目前关注度较高的新闻热点或专业资讯, 是面向新闻的子系统。在新闻子系统中,我们需要每天爬取实时新闻热点并对新闻内容进行存储。并且需要设计出一套高效、安全的新闻展示接口。
好友记录子系统记录了用户转发文章后其他好友阅读记录的信息。同样也是 面向用户的子系统,与用户子系统不同的是,好友记录子系统面向的是用户的好友,负责处理用户好友的浏览信息,并且能通过浏览信息提取出与好友的共同兴趣、好友关注度等关键信息,为用户提供更多社交机会。
本系统基于接口、组件和 SOA 的体系结构设计、多层体系结构设计、关键需求的体系结构设计等多种体系结构设计方法,提出了一种基于微信公众平台的通用快速开发体系结构,通用快速开发体系结构的总体设计如图2所示,总体结构分为表示层、业务层、数据层、数据库、操作环境。
(1)表现层
在腾讯正式推出 WeUI 框架的基础上,采用适合移动的新技术[14(] HTML5、
CSS3、JavaScript 等)进行 UI 模板设计,前端匹配 MVC 设计模式,包括 HTML5 模板、CSS3 模板、UI 组件和扩展 UI 组件、通用 JS 组件,JS 业务逻辑、HTTP 请求交互
(AJAX+JSON)、通用数据对象、HTML 数据、JSON 数据等。
(2)业务层:我们将微信公共平台技术文档的接口打包,对 WxJava 提供的接口做二次开发,这样该架构的用户就不必阅读复杂的文档描述,只需直接调用打包的服务 API,除了设计一些抽象类作为基类来处理业务逻辑外,还设计了一些通用的业务扩展模块,为表示层提供通用的服务。
(3)数据层:在该层设计了一个专用的数据库访问接口,声明了一些通用的数据库访问和操作接口(增加、删除、更改、查询等),同时增加了一些通用的数据缓存 类。
(4)数据库:我们采用了更适合 LAMP 平台的 MySQL 数据库. 在数据库设计中,有数据库功能模块和一些自定义扩展模块,使数据库更适合业务需求系统开发。
(5)操作环境:主要是基于 WEB 服务器的 LAMP 架构。服务器包括在服务器上安装 Linux 操作系统、Tomcat、MySQL 关系数据库和 JDK。当服务器运行时,客户端的 http 请求将被 Linux 操作系统转发到 Tomcat 服务器进行处理。
五、系统实现技术方法研究
公众号系统的实现技术各式各样,如果没有选择一个适合系统的技术,会对系统的实现带来很大的困难,并且会降低系统的性能。所以选择一个适合系统的技术框架对系统的实现来说至关重要。J2EE[15] 是实现公众号系统的一种重要技术,目前使用 J2EE 实现 B/S 结构的公众号系统越来越流行且其技术非常成熟,性能也得到了极大的提升。目前实现轻量级的 J2EE 系统的开发框架非常多,本项目拟采用基于 WxJava[12] 的开发框架,同时对 WeUI 前端框架[16]、Vue.JS 框架[17] 和SSM 后端框架[18] 进行集成。WxJava 是微信团队提供给微信服务开发者的强大SDK,集成了许多微信常用接口,能帮助开发者快速开发出一套公众号平台。在基于 WxJava 的基础上,对表示层、业务层、数据层选择合适的技术框架进行开发。表示层选择 Vue.JS 的原因是由于其高效灵活的 CSS 选择器、更好的 DOM 操作、简单的代码等。业务层框架由 Spring Boot、MyBatis、Redis 组成,Spring Boot 是 2013
年诞生的用于简化 Spring 框架的基础框架,能够大大简化开发流程,而 MyBatis 则简化了系统与数据库的交互,提高 JDBC 的操作效率。Redis 则作为当前最流行的
NoSQL 数据库,拥有强悍的性能和丰富的数据类型。以下是框架的简单特征与其在系统开发中的作用。
5.1 WxJava 框架
WxJava 是微信官方提供给微信开发者的 SDK,提供了消息管理、用户管理、菜单管理、公众号配置等强大功能。基于 WxJava,我们可以快速开发出一套适用于微信公众号平台的 Web 项目。WxJava 为了简化编译,使用了 lombok,将大量代码进行自动生成,无需为 POJO 类添加 get/set 等方法。同时,WxJava 基于微信开发文档,将微信常用服务进行模块化,开发者仅需要通过使用 WxJava 提供的 API 即可完成对微信公众号的配置、权限获取、用户管理。但 WxJava 并未提供对用户信息的获取、好友圈的构建与浏览记录的获取,因此本系统的实现难点在于需要基于 WxJava 进行二次开发,实现上述功能,并且能够保证框架的可扩展、易修改性。
5.2 WeUI 框架
因为集客公众号是基于微信平台的,所以需要设计出一个易操作、易阅读并且能够兼容微信浏览器的 UI 框架。目前主流的 UI 框架主要有 Bootstrap、Amaze UI、WeUI 等。对比其他框架,考虑到对于微信内置浏览器的兼容性问题,我们选择了 WeUI 框架。WeUI 是微信移动 Web 的用户界面库,由微信设计团队专门设计, 符合微信原创视觉体验,这可以让用户更加了解感知的使用,包括按钮、单元格、对话框等。
5.3 Spring 框架Spring 是一个轻量级的容器框架,具有控制反转(IoC)和面向切面编程(AOP)
的特性[19]。Spring 的出现为企业应用开发带来了极大的便利,解决了日常程序开发的复杂性。Spring 框架为 JavaBean 构件提供了组件构造、事务和日志的统一管理、数据访问支持等服务, 是支持 JavaBean 构件运行的容器。Spring 通过使用面向对象编程原理以及模型、视图和控制器的 MVC 方法,允许程序员开发复杂的抽象思维,而不必关注详细的组件封装,允许专注于软件功能,而不必详细考虑过程的复杂性。[20]
Spring 的特点之一——Inversion of Control(IOC) 控制反转,就是程序的控制权不再由应用程序代码本身决定,而是由框架或容器来决定。Dependency Injection(DI) 依赖注入,组件之间的依赖关系 ( 即组件间的调用关系) 由 Spring 配置文件来设置; 在系统运行时,Spring 容器根据配置文件的描述自动完成组件的生成与分配。
Aspect-Oriented Programming (AOP) 面向切面编程是面向对象编程(OOP)的补充,其面向的是程序执行的不同阶段。面向对象将应用程序分解为一个个不同的对象来处理, 而 AOP 则是将程序分解成各个执行点或关注点。这种方式能够使程序各个部分模块化,例如数据库事务在执行前中后都可被作为不同的模块来处理。
Spring Boot 是目前主流的集成 Spring 的基础框架,主要用来减少 Spring 框架的开发、配置、调试和部署工作,同时在项目内集成了很多实用的基础框架[19]。在传统的 Spring 框架开发中,用户需要自行编写配置文件来配置 Spring,并在
Maven、Gradle 中加入相应的依赖包才能使用。如果使用 Spring Boot 进行开发,仅需在 Maven 配置文件中加上少量的配置,就可以在代码中使用所需要的框架,让原本复杂的配置简化到接近零代码配置,同时 Spring Boot 还轻松解决了依赖包的版本问题。除此之外,Spring Boot 不仅提供了微服务框架开发功能,能够将 Web程序打包为 war 文件部署,还可以将 Web 程序编译为可独立运行的 jar 包,同时还内嵌了 Tomcat 容器,使得 Web 程序能够独立于容器外运行。不仅如此,Spring Boot 还提供了很多强大的开发工具,例如:测试功能集成、消息(JMS)、发送邮件、 JTA 分布式事务、JMX 的监控和管理技术等等。
使用 Spring 的另一个重要原因在于,Spring MVC 完美地实现了 MVC 的核心概念和特性[21],我们可以通过简单的配置动态地装配组件,将所有请求都交与容器。Spring MVC 的工作原理如下:当客户机发送 HTTP 请求时,核心控制器
(DispatcherServlet)接收该请求,并根据 URL 查找 HandleMapping 以将请求发送到相应的控制器。控制器调用适当的业务来处理逻辑,并在处理完成时将视图名称和 ModelAndView 对象返回给 DispatcherServlet,最后通过 ViewSolver 将返回的 ModelAndView 呈现给相应的界面[18]。图3展示了 DispatcherServlet 对请求的处理流程。
图 3: Spring Web MVC 处理请求工作流程
表 1: WebApplicationContext 中特殊的 bean
DispatcherServlet 实际上属于一种 Servlet,它继承了 HttpServlet。和其它 Servlet 一样,DispatcherServlet 在 web 项目中的的 web.xml 文件中进行配置。 Spring 的 Dispatcher 有一组特殊的 bean,如表1所示,用来处理请求和渲染相应的视图。
5.4 MyBatis 框架
MyBatis 是一种 Java 语言下的数据库持久层框架,具有不同程度的 JDBC
封装。与直接使用 JDBC 访问数据库相比,它们的开发效率有了显著提高[22]。
MyBatis 支持常见的 SQL 查询、过程存储和高级映射等操作。MyBatis 的配置也十分简单,仅仅需要简单的 XML 或注释就可以进行配置和原始映射,并能够轻松地将接口和 Java POJO 映射到数据库中相对应的记录行。MyBatis 框架主要包含
DAO 组件与 SQL Map 组件两大类,其架构图如图4所示:
使用 MyBatis 能够大大减少 JDBC 操作开发时间,能够专注与业务逻辑开发。而使用 MyBatis 的难点在于,需要将 MyBatis 与其他框架进行整合、配置,保证系统的稳定性。并且需要对 MyBatis 获取的信息进行缓存,来减轻数据库的压力,
MyBatis 有不同的缓存方案,选择合适的缓存方案来缓存不同的数据至关重要的。同时,MyBatis 的 SQL 语句编写需要注重语句执行的效率,尽量选择执行快的语句,对一些慢查询能够进行优化分析。
5.5 Redis
Redis 是一个开源的内存数据存储工具,可以被用作数据库、缓存和消息代理。它支持非常丰富的数据结构储存,例如字符串、哈希、列表、集合、带范围查询的排序集合等等。Redis 具有内置的复制、Lua 脚本、LRU 删除、事务和不同级别的磁盘持久性,并通过 Redis Sentinel 和带有 Redis 集群的自动分区提供高可用性[23]。由于 Redis 的所有操作都在内存中完成,有效地解决了数据库中 CPU 和磁盘 I / 0 之间的处理速度的矛盾,将数据保存在内存中相比从磁盘上访问数据能够极大地提高应用的性能,所以 Redis 的响应速度非常快[24]。并且 Redis 支持数据的主从复制,Redis 的主从复制配置非常简单[25],能够支持多级 Master/Slave,一个 master 可供多个 slave 连接,slave 也可以接收其他 slave 的连接;主从同步时 master 和 slave都是非阻塞的。
图 4: MyBatis 架构图
使用 Redis 的主要原因在于 Redis 高效的性能,能够解决用户并发访问时系统的响应时间和处理性能。系统使用 Redis 的主要难点在于 Redis 框架与其他框架的整合、配置,做好数据库的持久化与备份。同时,Redis 作为 NoSQL 数据库,我们需要合理地选择那些用户频繁访问的数据进行储存,并且利用 Redis 丰富的数据结构,对数据的储存进行优化。并且需要对 Redis 造成的数据雪崩、数据击穿有相应的处理方案,减轻数据库压力。
5.6 Vue.JS
Vue.JS 是一个灵活的、用于构建用户界面的渐进式 JavaScript 框架。它封装了 JavaScript 常用的功能代码,提供一种简便的 JavaScript 设计模式,优化 DOM 操作、事件处理、动画设计和 Ajax 交互。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。Vue 使用了 Virtual DOM,向用户提供了响应式 (Reactive) 和组件化 (Composable) 的视图组件,通过组件开发,开发者的开发流程被大大简化。同时,Vue.JS 将注意力集中保持在核心库,而将其他功能如路由和全局状态管理交给相关的库,大大增加了 Vue.JS 的扩展能力。
使用 Vue.JS 的主要重点在于通过其特性进行核心功能开发,能够保证表示层的动画、组件等能够稳定地展示在页面上,同时兼备可扩展性。并且能够将 Vue.JS 项目与 CSS 文件进行打包部署,将前后端进行分离。
六、总结与展望
随着微信用户与日俱增,移动互联网的不断发展,微信社交逐渐成为人们不可 或缺的社交方式,并且能够为用户提供更加丰富的信息渠道。而公众号作为微信产品的宠儿,占据着微信生态链的半壁江山。利用好公众号和朋友圈的社交圈以及信息传播优势,线上社交和微信营销或许会成为新的商机。
而集客公众号也正是应运而生,为用户日益增长的知识需求和社交需求提供了平台和工具。在集客公众号中,用户足不出户就能够浏览全球各地的热点新闻, 并且能够将其分享到朋友圈。精确的访客记录能够为用户提供更好的社交体验, 谁在关注我,谁与我有共同的兴趣爱好一目了然。在获得了好友的浏览记录后,我
们就更能够精准社交。集客公众号在线上社交拥有着巨大商机,实现集客公众号将有效的提高微信用户的社交效率,带来巨大的经济效益。
参考文献
[1] Report on user behavior of social media in 2015[R].
[2] 腾讯 2019 年 Q3 财报 [R].
[3] 2019 年微信公众号文章数据报告 [R].
[4] 程丹 . 微信朋友圈: 社会网络视角下的虚拟社区 [J]. 新闻记者 (05):73–77.
[5] 唐金杰. 微信朋友圈的人际互动模式研究 [D].[S.l.]: 哈尔滨工业大学.
[6] Simon F, Tossan V. Does brand-consumer social sharing matter? A relational framework of customer engagement to brand-hosted social media[J]. Journal of Business Research, 85:175–184.
[7] Gan, Chunmei. Understanding WeChat usersl̈ iking behavior: An empirical study in China[J]. Computers in Human Behavior, 68:30–39.
[8] 谭春辉; 王一君. 微信朋友圈信息分享行为影响因素分析 [J]. 现代情报, 2020, 40:84–95+102.
[9] Herrick D. The social side o‘f cyber power’? Social media and cyber operations[C].
2016 8th International Conference on Cyber Conflict (CyCon), 2.
[10] 方爱强. 微信的营销价值与运用策略 [J]. China This Week in Consumer Electronics, 2013:113–114.
[11] 杨良琼. 大学生在 QQ 空间中的自我表露研究 [D].[S.l.]: 南昌大学, 2010.
[12] WxJava 官方文档 [R].
[13] 微信公众平台在线文档 [R].
[14] Xiao B. Research on Web front end development technology and optimization direction[J]. Wireless Internet Technology, 2019.
[15] Johnson, R. J2EE development frameworks[J]. Computer, 38(1):107–110.
[16] WeUI[R].
[17] Vue.js: 渐进式 JavaScript 框架 [R].
[18] Zhang D, Wei Z, Yang Y. Research on Lightweight MVC Framework Based on Spring MVC and Mybatis[C]. Proceedings of the 2013 Sixth International Sympo- sium on Computational Intelligence and Design - Volume 01, 2013.
[19] 王永和, 张劲松, 邓安明, et al. Spring Boot 研究和应用 [J]. 信息通信, 2016(10): 91–94.
[20] Arthur J, Azadegan S. Spring framework for rapid open source J2EE Web appli- cation development: a case study[C]. Software Engineering, Artificial Intelligence, Networking and Parallel/Distributed Computing, 2005 and First ACIS Internation- al Workshop on Self-Assembling Wireless Networks. SNPD/SAWN 2005. Sixth International Conference on, 2005.
[21] 徐雯, 高建华. 基于 Spring MVC 及 MyBatis 的 Web 应用框架研究 [J]. 微型电脑应用 (7):5–8+14.
[22] 徐雯, 高建华. 基于 Spring MVC 及 MyBatis 的 Web 应用框架研究 [J]. 微型电脑应用 (7):5–8+14.
[23] Redis instruction[R].
[24] 王心妍. Memcached 和 Redis 在高速缓存方面的应用 [J]. 无线互联科技 (9): 9–10.
[25] 曾超宇, 李金香. Redis 在高速缓存系统中的应用 [J]. 微型机与应用, 2013, 32(12):11–13.