一、背景
目前APP已經(jīng)實(shí)現(xiàn)一個(gè)基本的分享功能,但實(shí)現(xiàn)方式是把分享所需的參數(shù)寫(xiě)死在畫(huà)面上,如分享的方式(QQ、微信)、分享鏈接、標(biāo)題等,不能對(duì)參數(shù)進(jìn)行靈活配置。
二、目標(biāo)
1、可靈活配置分享的分享方式(QQ、QQ空間、微信、朋友圈),如配置是否顯示、排列順序等。
2、對(duì)分享內(nèi)容進(jìn)行管理,對(duì)分享的標(biāo)題、描述、鏈接、縮略圖等靈活配置。
3、存儲(chǔ)分享記錄信息,定時(shí)清理過(guò)期數(shù)據(jù),根據(jù)記錄信息統(tǒng)計(jì)分享次數(shù)、點(diǎn)擊數(shù)、點(diǎn)擊率等,并進(jìn)行報(bào)表展示。
4、基于分享基礎(chǔ)框架集成邀請(qǐng)功能實(shí)現(xiàn)
三、設(shè)計(jì)思路
1、將本次分享功能作為基礎(chǔ)框架進(jìn)行開(kāi)發(fā),不摻雜任何業(yè)務(wù)邏輯,但必須保證框架的靈活性,可在框架上擴(kuò)展其他業(yè)務(wù)功能,如即將開(kāi)發(fā)的分享邀請(qǐng)活動(dòng)等。
四、功能設(shè)計(jì)
4.1 功能概況:
● 分享方式管理
● 分享類(lèi)型管理
● 分享信息管理
● 分享記錄管理
● 分享功能實(shí)現(xiàn)
● 邀請(qǐng)功能實(shí)現(xiàn)
● 分享走勢(shì)分析
4.2 詳細(xì)設(shè)計(jì):
● 分享方式管理
分享方式指類(lèi)似 QQ、QQ空間、微信、朋友圈、微博等可分享的渠道,《分享方式管理》主要維護(hù)分享方式的增加、修改、查詢等基本操作,并可設(shè)置分享方式是否啟用和排列順序,詳情見(jiàn)《分享方式表》,使用分享方式時(shí),只能選擇已啟用的數(shù)據(jù)。
用戶使用APP點(diǎn)開(kāi)分享按鈕進(jìn)行分享時(shí),展示的分享方式通過(guò)接口獲取。接口:分享方式查詢接口(queryEnableSharWay(LongshrModeId,shrChannel,shrClient))
● 分享類(lèi)型管理
分享類(lèi)型是指分享出去的內(nèi)容的類(lèi)型,如鏈接、文本、圖片、音樂(lè)等,目前只考慮鏈接,其他類(lèi)型以后可以擴(kuò)展使用。類(lèi)型主要用于調(diào)用第三方分享接口時(shí),第三方需根據(jù)傳入的類(lèi)型判斷顯示方式,例如:
下圖是調(diào)用微信分享接口的參數(shù)信息,箭頭處指定了分享的分享類(lèi)型為“鏈接”類(lèi)型:

● 分享信息管理
創(chuàng)建分享出去的數(shù)據(jù)對(duì)象,分享信息包括分享方式、客戶端類(lèi)型(H5、APPPC)、分享類(lèi)型、標(biāo)題、描述、鏈接等屬性,詳情見(jiàn)《分享表》。
區(qū)分客戶端類(lèi)型是為其做統(tǒng)計(jì)做支撐,APP、H5 和 PC 分享不同之處在于分享時(shí)調(diào)用的第三方接口不同,并且H5和PC端第三方接口不提供回調(diào),只有APP原生分享提供回調(diào)接口。例如,以下是QQ空間和新浪微博網(wǎng)頁(yè)分享的js代碼:
QQ空間:官方地址:https://connect.qq.com/intro/share

新浪微博:官網(wǎng)地址:http://open.weibo.com/sharebutton

或者

其他網(wǎng)頁(yè)分享也類(lèi)似,具體參考各官網(wǎng)開(kāi)發(fā)者平臺(tái)。
● 分享記錄管理
分享過(guò)程中實(shí)時(shí)保存分享記錄,詳情見(jiàn) 《分享記錄表》,后臺(tái)提供分享記錄查詢畫(huà)面,后續(xù)可根據(jù)分享記錄信息進(jìn)行統(tǒng)計(jì)、分析。
● 分享功能實(shí)現(xiàn)
1、創(chuàng)建分享必須的基礎(chǔ)數(shù)據(jù):
第一步:創(chuàng)建分享方式、分享類(lèi)型、業(yè)務(wù)類(lèi)型、分享渠道等基礎(chǔ)數(shù)據(jù)
第二步:創(chuàng)建分享信息,創(chuàng)建時(shí)需指定第一步創(chuàng)建好的分享類(lèi)型、業(yè)務(wù)類(lèi)型、分享渠道,并配置好分享的其他屬性,如鏈接地址等,業(yè)務(wù)類(lèi)型(分享場(chǎng)景)定義:分享時(shí),按業(yè)務(wù)劃分在訂單頁(yè)面分享內(nèi)容的就是訂單,活動(dòng)頁(yè)面分享的內(nèi)容就是活動(dòng),所以在創(chuàng)建分享時(shí)需指定分享的業(yè)務(wù)類(lèi)型。
2、分享主流程:
a. 前端用戶點(diǎn)擊分享按鈕,先調(diào)用分享方式查詢接口(queryEnableSharWay(Long
sharId)),獲取可用的分享方式,用戶點(diǎn)擊某一個(gè)分享方式后,調(diào)用分享接口(oShare(Long shareId,int shareWhyID))進(jìn)行分享,調(diào)用接口后分享記錄會(huì)自動(dòng)保存。
b. 分享時(shí)統(tǒng)一先通過(guò)分享總控制中心進(jìn)行處理,不直接進(jìn)行分享。實(shí)現(xiàn)原理:訪問(wèn)總控制中心時(shí)帶著分享ID和分享方式兩個(gè)參數(shù),總控制中心處理時(shí)可根據(jù)不同的業(yè)務(wù)類(lèi)型走不同的實(shí)現(xiàn)。
分享接口:doShare(Long shareId,int shareWhyID) (shareId:分享ID,shareWhy:分享方式ID)
分享前處理:統(tǒng)一走總控制中心的好處是,可以在分享前做一些業(yè)務(wù)處理,具體可根據(jù)不同的業(yè)務(wù)類(lèi)型實(shí)現(xiàn),例如,分享前需插入一條狀態(tài)為默認(rèn)的分享記錄或者對(duì)分享的內(nèi)容或描述進(jìn)行修改。注:總控制中心構(gòu)造的URL地址時(shí),需將參數(shù)拼接到URL后面,如XXX?sharLogId=1001
分享成功后處理:用戶分享成功后,APP第三方會(huì)提供一個(gè)分享成功的回調(diào),回調(diào)需調(diào)用內(nèi)部接口(doShareBack(long sharLogId))。
回調(diào)處理:回調(diào)接口同樣走總控制中心,總控制中心根據(jù)分享記錄ID查詢到業(yè)務(wù)類(lèi)型,并根據(jù)不同的業(yè)務(wù)類(lèi)型做不同的實(shí)現(xiàn)。由于pc端網(wǎng)頁(yè)分享不提供回調(diào),可定義只要分享即默認(rèn)為成功,并調(diào)用doShareBack(long sharLogId)接口。
3、用戶閱讀分享:
用戶點(diǎn)擊分享鏈接后,統(tǒng)一通過(guò)總控制中心進(jìn)行轉(zhuǎn)發(fā),不直接訪問(wèn)分享的活動(dòng)地址。實(shí)現(xiàn)原理:訪問(wèn)總控制中心時(shí)帶著分享記錄ID參數(shù),總控制中心通過(guò)ID查詢到鏈接地址進(jìn)行轉(zhuǎn)發(fā)。
【進(jìn)入后處理】:統(tǒng)一走總控制中心的好處是,可以在用戶點(diǎn)擊分享地址后做一些業(yè)務(wù)處理,具體可根據(jù)不同的業(yè)務(wù)類(lèi)型實(shí)現(xiàn),例如,可以判斷分享的有效期,如果已過(guò)期,則不能訪問(wèn)。
【業(yè)務(wù)處理后處理】:業(yè)務(wù)處理完成后也需要進(jìn)行回調(diào),回調(diào)方式根據(jù)不同業(yè)務(wù)做不同處理。例如邀請(qǐng)功能,注冊(cè)完成后統(tǒng)一發(fā)message消息進(jìn)行回調(diào)處理,詳情見(jiàn)“邀請(qǐng)功能實(shí)現(xiàn)”
4、分享內(nèi)容可配置化
分享分為公用分享和用戶個(gè)性化分享; 例如活動(dòng)分享,所有用戶分享的原始內(nèi)容應(yīng)該都是一樣的,個(gè)性化分享例如訂單,每個(gè)用戶分享的是自己的唯一訂單.
實(shí)現(xiàn)方法:不管是共用還是個(gè)性化分享,不同之處都體現(xiàn)在分享的標(biāo)題或描述上,故可以通過(guò)總控制中心對(duì)分享標(biāo)題或描述進(jìn)行修改,修改的方式根據(jù)關(guān)鍵字替換,如:{:key},例如訂單分享顯示商品名稱,則需替換商品名稱的關(guān)鍵字。
5、分享鏈接加密:考慮到分享鏈接安全,鏈接將采用AES+MD5技術(shù)加密,如下:
假如我們要對(duì)URL“www.baidu.com?pram1=1001&pram2=1002”進(jìn)行加密,
1、先獲取參數(shù)集合即pram1=1001&pram2=1002,再根據(jù)特殊的算法將參數(shù)集合打亂,
例如得到pram1=1002&pram2=1001
2、對(duì)pram1=1002&pram2=1001進(jìn)行MD5進(jìn)行加密,得到一個(gè)MD5碼,例如:
MD5=XXXXXXXXXXXXX
3、拼接要發(fā)送的URL為 www.baidu.com?
pram1=1001&pram2=1002&MD5=XXXXXXXXXXXXX
4、再對(duì)鏈接進(jìn)行AES加密得到最終的URL:XXXXXXXXXXXX(加密過(guò)的)解密url并判斷是否被篡改:
1、對(duì)URL進(jìn)行AES解密并得到參數(shù)pram1=1001&pram2=1002,再根據(jù)加密時(shí)同樣的算法將參數(shù)集合打亂,并進(jìn)行MD5加密,對(duì)比MD5判斷URL是否被篡改。
● 邀請(qǐng)功能實(shí)現(xiàn)
增加《分享邀請(qǐng)表》,用于存儲(chǔ)分享人和邀請(qǐng)人之間的關(guān)系;在用戶信息表添加關(guān)聯(lián)類(lèi)型(object_type)、關(guān)聯(lián)值(object_id)兩個(gè)字段,用于存儲(chǔ)用戶注冊(cè)的來(lái)源。 用戶訪問(wèn)分享地址時(shí),首先通過(guò)總控制中心進(jìn)行轉(zhuǎn)發(fā)到注冊(cè)頁(yè)面,保存注冊(cè)用戶信息時(shí),還需保存關(guān)聯(lián)類(lèi)型和關(guān)聯(lián)值,這里分別對(duì)應(yīng)(100:分享注冊(cè))和分享記錄ID,注冊(cè)成功后,向message中發(fā)一個(gè)消息,用于處理邀請(qǐng)成功后的回調(diào)。
● 分享走勢(shì)分析
1、增加《分享統(tǒng)計(jì)表》,每天定時(shí)按分享方式、分享渠道、分享類(lèi)型、分享ID、業(yè)務(wù)類(lèi)型統(tǒng)計(jì)每天的分享數(shù),點(diǎn)擊數(shù),詳細(xì)的統(tǒng)計(jì)策略見(jiàn)task服務(wù)。
2、后臺(tái)根據(jù)不同維度(分享方式、分享渠道、分享類(lèi)型、分享ID、業(yè)務(wù)類(lèi)型)展示統(tǒng)計(jì)的走勢(shì)圖及統(tǒng)計(jì)報(bào)表。(樣式可參考通知模塊)
4.3 taskserver(定時(shí)服務(wù)):
● 分享記錄表自動(dòng)清理服務(wù)
自動(dòng)清理分享記錄表中三個(gè)月前的數(shù)據(jù),將數(shù)據(jù)移動(dòng)到備份表中;頻率:30分鐘一次
清理邏輯:查出添加時(shí)間小于當(dāng)前日期前30天的數(shù)據(jù),注意,每次只查1000條,先遍歷逐條匹配備份表中是否存在當(dāng)前數(shù)據(jù),如存在,則不能再次插入。插入時(shí),要采用批量插入的方式,插入成功后,清除查詢出的記錄表數(shù)據(jù)
● 分享記錄統(tǒng)計(jì)服務(wù)
按天統(tǒng)計(jì)用戶的分享數(shù),點(diǎn)擊數(shù);頻率:每小時(shí)1次
● 分享記錄補(bǔ)漏統(tǒng)計(jì)服務(wù)
按天統(tǒng)計(jì)前3天用戶的分享數(shù),點(diǎn)擊數(shù);頻率:每天1次,時(shí)間:01:00
4.4 前端可調(diào)用接口:
● 分享方式查詢接口:queryEnableSharWay(Long shrModeId,shrChannel,shrClient)
● 分享接口:doShare(Long shareId,int shareWhyID) shareWhyID:分享方式ID
● 分享回調(diào)接口:doShareCallback(long sharLogId) sharLogId:分享記錄ID
五、數(shù)據(jù)庫(kù)設(shè)計(jì)
5.1、分享方式表:SHR_WAY

5.2、分享類(lèi)型表:SHR_TYPE

5.3、業(yè)務(wù)類(lèi)型表:SHR_BUSINESS_TYPE

5.5、業(yè)務(wù)類(lèi)型參數(shù)配置表:SHR_BUSINESS_TYPE_CONFIG

5.6 分享模塊表:SHR_MODE

5.7 分享表:SHR_INFO



5.8、分享記錄表:SHR_LOG


