BBSSDK插件技術方案

BBSSDK是一套能快速實現discuz論壇移動化的解決方案。BBSSDK插件則是聯通discuz和移動端的橋樑。今天主要對BBSSDK插件一些技術方案和解決辦法進行解答和說明。


主要從用戶環境問題、通信安全、日誌記錄、編碼兼容、簽到功能等方面進行講解說明。

一、用戶環境問題

當前現狀多數discuz站點的服務器環境都不太理想,網站的性能往往都不是很好。為了給普通用戶提供更好的服務,我們設計了mob數據中心承擔著類似cdn的功能,這樣移動端的響應速度將能得到可靠保證,基於這樣的設計,在插件端用到了mysql的觸發器機制。

需要說明的是,在產品使用過程中,有用戶對mob數據中心這種機制產生了誤解,認為是為了獲取他們的數據。為了打消不必要的誤解,我們也即將上線完全不依賴mob數據中心的插件,到時候用戶可以自由選擇安裝使用。

因為面向的是所有的discuz站點,很顯然每個discuz站點的服務器環境是不可能保證一致的,比如,discuz版本不同、PHP版本不同、mysql版本不同以及服務端的各種配置和賬號權限的不同等等。某些服務器環境問題只會在一些特別的使用場景才會觸發,如果在安裝前期不對站點服務器環境做嚴格檢查,在使用過程中再去排查難度將會非常大並且也十分不方便。基於此,在插件開發過程中引入了插件安裝的環境檢測步驟。

BBSSDK插件技術方案

主要講解一下,對數據庫權限以及bin-log日誌的判斷

數據庫權限

主要對discuz站點中配置的mysql的賬號進行權限檢測。通過在代碼中執行show grants;命令就可以查看配置的mysql賬號權限詳情。然後分析全局權限,如果全局權限不足再去分析配置的mysql賬號對應discuz所在庫的權限,如果權限滿足ALL PRIVILEGES(超級權限)或者滿足'SELECT','INSERT','UPDATE','DELETE','DROP','TRIGGER','CREATE'這些權限則放行,不滿足則逐一提示給安裝者,由安裝者去提權或者變更賬號。

bin-log日誌

因為插件用到了mysql的觸發器機制,在創建觸發器的過程中可能會因為bin-log的設置而失敗。為了保證插件的正常安裝,我們需要安裝者暫時關閉bin-log或者log_bin_trust_function_creators置為ON。對這個條件的判斷是通過在代碼中執行show variables like "log_bin%"命令實現。當站點不滿足條件時,將會在環境檢測的備註欄提示安裝者具體解決方法。

當引入可目視化的環境檢測方案後,可以提前暴露風險項規避潛在的報錯,並且讓安裝者對插件的使用也有一個直觀的認識,大大減輕技術支持工作量。

二、通信安全

BBSSDK插件主要起到聯通移動端APP和discuz的橋樑作用。通過BBSSDK插件提供http(https)協議的接口給mob數據中心及APP客戶端。基於discuz站點環境不確定性的因素,插件接口放棄了流行的restful方案,只支持get及post請求。

通過結合派發給用戶的appkey及secret生成簽名來保證所有接口請求的通信安全。

三、日誌收集

考慮到站點環境的複雜性,設計了一套插件運行的日誌記錄方案。這樣可以在一些極端情況下,讓用戶提供插件產生的日誌記錄,以便快速分析定位問題。

日誌系統採用了PHP的monolog擴展包來實現。

四、編碼兼容技術方案

目前BBSSDK插件兼容discuz的gbk和utf8編碼。

採用了簡單可靠的方法實現了兩種編碼的兼容。

對於有面向用戶輸出的內容,抽離為一個獨立的文件,然後對這個獨立的文件保存為兩套編碼,在引入時通過判斷當前discuz編碼來引用,如

if(preg_match('%utf%is', $_G['charset'])){

require_once 'bbssdksetting_utf8.php';

}else{

require_once 'bbssdksetting_gbk.php';

}

五、簽到功能

移動端的簽到功能依賴第三方的小米簽到插件。目前小米簽到插件有免費版和收費版,這兩個版本的代碼結構和處理邏輯都不一樣,但是通過分析其代碼發現,只需要引入其代碼即可實現打通主要功能。為了保證與移動端交互安全,請求體也通過結合派發給用戶的AppKey及secret生成簽名進行校驗。

在打通小米簽到功能的過程中,主要涉及到對xml結構體形式的消息體進行轉換。具體實現方式通過js對xml解析實現

var parser=new DOMParser();

var xmlDoc=parser.parseFromString(response,"text/xml");

//提取數據

var msg = xmlDoc.getElementsByTagName('root')[0].textContent;

文 / Mob 王璐

BBSSDK插件技術方案

ShareSDK 輕鬆實現社會化功能,以其強大的 App 社交分享功能深受開發者熟知和好評;

SMSSDK 可快速集成短信驗證功能,幫助開發者打通手機通訊錄好友的社交圈;

MobLink 打破了 App 孤島,實現了 Web 與 App 的無縫鏈接,新用戶在首次打開 App 時,大大提高用戶轉化率;

Mob統計分析 用數據驅動產品,精準化行為分析 + 多維數據模型 + 匹配全網標籤 + 垂直行業分析顧問;

MobPush 快速集成推送服務,應對多樣化推送場景;

BBSSDK 是 Discuz 論壇移動化解決方案,同步 Discuz 論壇數據實現論壇移動化;

ShareREC 手遊錄像分享則是 ShareSDK 圖文分享的延伸,可為手遊實現邊玩邊錄的功能,以此提升玩家黏度並有效促進推廣;

MobAPI 為開發者提供各種所需的原始數據及穩定的 API SERVICE,也免去了自己收集數據的繁瑣步驟;

MobPay 多種主流支付渠道可一鍵接入,滿足企業多樣化需求;

ShopSDK 2小時快速搭建您的商城系統,商品管理 - 訂單交易 - 售後退款 - 整套解決方案,豐富您APP的應用場景;

MobIM 為開發者提供即時通訊的消息通道服務,專注於保障通訊的安全穩定可靠,支持開發者使用App的自有用戶系統,或第三方用戶系統;

App工廠 全新App製作解決方案 ,可組合幾十種不同種類的App滿足電商、生活服務、教育、資訊、社交等多個行業的需求。

截止 2017 年 12 月Mob 開發者服務平臺全球設備覆蓋超過 76 億,SDK下載量超過 318 萬次,服務超過 36 萬款移動應用。


分享到:


相關文章: