分享模块功能方案设计


一、背景

目前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

五、数据库设计

5.1、分享方式表:SHR_WAY


5.2、分享类型表:SHR_TYPE


5.3、业务类型表:SHR_BUSINESS_TYPE


5.5、业务类型参数配置表:SHR_BUSINESS_TYPE_CONFIG

5.6 分享模块表:SHR_MODE


5.7 分享表:SHR_INFO



5.8、分享记录表:SHR_LOG



5.9、分享记录备份表:SHR_LOG_BAK

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,590评论 0 15
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 4,968评论 0 9
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,067评论 1 32
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 5,144评论 1 23
  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵胜奥阅读 4,746评论 0 1