一、背景
目前APP已经实现一个基本的分享功能,但实现方式是把分享所需的参数写死在画面上,如分享的方式(QQ、微信)、分享链接、标题等,不能对参数进行灵活配置。
二、目标
1、可灵活配置分享的分享方式(QQ、QQ空间、微信、朋友圈),如配置是否显示、排列顺序等。
2、对分享内容进行管理,对分享的标题、描述、链接、缩略图等灵活配置。
3、存储分享记录信息,定时清理过期数据,根据记录信息统计分享次数、点击数、点击率等,并进行报表展示。
4、基于分享基础框架集成邀请功能实现
三、设计思路
1、将本次分享功能作为基础框架进行开发,不掺杂任何业务逻辑,但必须保证框架的灵活性,可在框架上扩展其他业务功能,如即将开发的分享邀请活动等。
四、功能设计
4.1 功能概况:
● 分享方式管理
● 分享类型管理
● 分享信息管理
● 分享记录管理
● 分享功能实现
● 邀请功能实现
● 分享走势分析
4.2 详细设计:
● 分享方式管理
分享方式指类似 QQ、QQ空间、微信、朋友圈、微博等可分享的渠道,《分享方式管理》主要维护分享方式的增加、修改、查询等基本操作,并可设置分享方式是否启用和排列顺序,详情见《分享方式表》,使用分享方式时,只能选择已启用的数据。
用户使用APP点开分享按钮进行分享时,展示的分享方式通过接口获取。接口:分享方式查询接口(queryEnableSharWay(LongshrModeId,shrChannel,shrClient))
● 分享类型管理
分享类型是指分享出去的内容的类型,如链接、文本、图片、音乐等,目前只考虑链接,其他类型以后可以扩展使用。类型主要用于调用第三方分享接口时,第三方需根据传入的类型判断显示方式,例如:
下图是调用微信分享接口的参数信息,箭头处指定了分享的分享类型为“链接”类型:
● 分享信息管理
创建分享出去的数据对象,分享信息包括分享方式、客户端类型(H5、APPPC)、分享类型、标题、描述、链接等属性,详情见《分享表》。
区分客户端类型是为其做统计做支撑,APP、H5 和 PC 分享不同之处在于分享时调用的第三方接口不同,并且H5和PC端第三方接口不提供回调,只有APP原生分享提供回调接口。例如,以下是QQ空间和新浪微博网页分享的js代码:
QQ空间:官方地址:https://connect.qq.com/intro/share
新浪微博:官网地址:http://open.weibo.com/sharebutton
或者
其他网页分享也类似,具体参考各官网开发者平台。
● 分享记录管理
分享过程中实时保存分享记录,详情见 《分享记录表》,后台提供分享记录查询画面,后续可根据分享记录信息进行统计、分析。
● 分享功能实现
1、创建分享必须的基础数据:
第一步:创建分享方式、分享类型、业务类型、分享渠道等基础数据
第二步:创建分享信息,创建时需指定第一步创建好的分享类型、业务类型、分享渠道,并配置好分享的其他属性,如链接地址等,业务类型(分享场景)定义:分享时,按业务划分在订单页面分享内容的就是订单,活动页面分享的内容就是活动,所以在创建分享时需指定分享的业务类型。
2、分享主流程:
a. 前端用户点击分享按钮,先调用分享方式查询接口(queryEnableSharWay(Long
sharId)),获取可用的分享方式,用户点击某一个分享方式后,调用分享接口(oShare(Long shareId,int shareWhyID))进行分享,调用接口后分享记录会自动保存。
b. 分享时统一先通过分享总控制中心进行处理,不直接进行分享。实现原理:访问总控制中心时带着分享ID和分享方式两个参数,总控制中心处理时可根据不同的业务类型走不同的实现。
分享接口:doShare(Long shareId,int shareWhyID) (shareId:分享ID,shareWhy:分享方式ID)
分享前处理:统一走总控制中心的好处是,可以在分享前做一些业务处理,具体可根据不同的业务类型实现,例如,分享前需插入一条状态为默认的分享记录或者对分享的内容或描述进行修改。注:总控制中心构造的URL地址时,需将参数拼接到URL后面,如XXX?sharLogId=1001
分享成功后处理:用户分享成功后,APP第三方会提供一个分享成功的回调,回调需调用内部接口(doShareBack(long sharLogId))。
回调处理:回调接口同样走总控制中心,总控制中心根据分享记录ID查询到业务类型,并根据不同的业务类型做不同的实现。由于pc端网页分享不提供回调,可定义只要分享即默认为成功,并调用doShareBack(long sharLogId)接口。
3、用户阅读分享:
用户点击分享链接后,统一通过总控制中心进行转发,不直接访问分享的活动地址。实现原理:访问总控制中心时带着分享记录ID参数,总控制中心通过ID查询到链接地址进行转发。
【进入后处理】:统一走总控制中心的好处是,可以在用户点击分享地址后做一些业务处理,具体可根据不同的业务类型实现,例如,可以判断分享的有效期,如果已过期,则不能访问。
【业务处理后处理】:业务处理完成后也需要进行回调,回调方式根据不同业务做不同处理。例如邀请功能,注册完成后统一发message消息进行回调处理,详情见“邀请功能实现”
4、分享内容可配置化
分享分为公用分享和用户个性化分享; 例如活动分享,所有用户分享的原始内容应该都是一样的,个性化分享例如订单,每个用户分享的是自己的唯一订单.
实现方法:不管是共用还是个性化分享,不同之处都体现在分享的标题或描述上,故可以通过总控制中心对分享标题或描述进行修改,修改的方式根据关键字替换,如:{:key},例如订单分享显示商品名称,则需替换商品名称的关键字。
5、分享链接加密:考虑到分享链接安全,链接将采用AES+MD5技术加密,如下:
假如我们要对URL“www.baidu.com?pram1=1001&pram2=1002”进行加密,
1、先获取参数集合即pram1=1001&pram2=1002,再根据特殊的算法将参数集合打乱,
例如得到pram1=1002&pram2=1001
2、对pram1=1002&pram2=1001进行MD5进行加密,得到一个MD5码,例如:
MD5=XXXXXXXXXXXXX
3、拼接要发送的URL为 www.baidu.com?
pram1=1001&pram2=1002&MD5=XXXXXXXXXXXXX
4、再对链接进行AES加密得到最终的URL:XXXXXXXXXXXX(加密过的)解密url并判断是否被篡改:
1、对URL进行AES解密并得到参数pram1=1001&pram2=1002,再根据加密时同样的算法将参数集合打乱,并进行MD5加密,对比MD5判断URL是否被篡改。
● 邀请功能实现
增加《分享邀请表》,用于存储分享人和邀请人之间的关系;在用户信息表添加关联类型(object_type)、关联值(object_id)两个字段,用于存储用户注册的来源。 用户访问分享地址时,首先通过总控制中心进行转发到注册页面,保存注册用户信息时,还需保存关联类型和关联值,这里分别对应(100:分享注册)和分享记录ID,注册成功后,向message中发一个消息,用于处理邀请成功后的回调。
● 分享走势分析
1、增加《分享统计表》,每天定时按分享方式、分享渠道、分享类型、分享ID、业务类型统计每天的分享数,点击数,详细的统计策略见task服务。
2、后台根据不同维度(分享方式、分享渠道、分享类型、分享ID、业务类型)展示统计的走势图及统计报表。(样式可参考通知模块)
4.3 taskserver(定时服务):
● 分享记录表自动清理服务
自动清理分享记录表中三个月前的数据,将数据移动到备份表中;频率:30分钟一次
清理逻辑:查出添加时间小于当前日期前30天的数据,注意,每次只查1000条,先遍历逐条匹配备份表中是否存在当前数据,如存在,则不能再次插入。插入时,要采用批量插入的方式,插入成功后,清除查询出的记录表数据
● 分享记录统计服务
按天统计用户的分享数,点击数;频率:每小时1次
● 分享记录补漏统计服务
按天统计前3天用户的分享数,点击数;频率:每天1次,时间:01:00
4.4 前端可调用接口:
● 分享方式查询接口:queryEnableSharWay(Long shrModeId,shrChannel,shrClient)
● 分享接口:doShare(Long shareId,int shareWhyID) shareWhyID:分享方式ID
● 分享回调接口:doShareCallback(long sharLogId) sharLogId:分享记录ID