一、背景
目前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