引言:本文旨在提供讀者製做一個本身的聚合SDK的思路,拋磚引玉,讓更多的讀者對聚合SDK有好的理解。git
這是最好的時代,這是最壞的時代,這是智慧的時代,這是愚蠢的時代;這是信仰的時期,這是懷疑的時期;這是光明的季節,這是黑暗的季節;這是但願之春,這是失望之冬;人們面前有着各樣事物,人們面前一無全部;人們正在直登天堂;人們正在直下地獄。——《雙城記》github
雙城記的開頭,正是如今手遊行業的一種寫照,充滿着但願的行業,也伴隨着混沌的行業。隨着手遊市場的蓬勃發展,不論從研發遊戲,運營遊戲,仍是到發行遊戲,維護相關的平臺,整個行業都在不斷的壯大。人上一百形形色色,遊戲上一百,色色行行,渠道上一百,感嘆活久見。多線程
正是由於行業規模的龐大且新興,不少事物並無統一的業界標準。在任何一款遊戲,要最終推到用戶手上,不可避免的須要和各大渠道打交道。不管你是獨立發行,仍是聯合運營,或多或少,會和App Store,Google play,國內各大發行渠道,阿里遊戲,應用寶等等之類的打交道。而和他們打交道最直接的交互,就是須要接入相對應的sdk模塊。架構
衆多渠道的sdk參差不齊,做爲遊戲開發商的cp,尤爲是衆多中小cp,第一次接入幾家甚至幾十家的渠道sdk已經須要花費鉅額大的時間和人力成本,而當渠道sdk更新,須要將這些sdk再次接入到本身遊戲中,又或者說,遊戲發生了更新,須要從新的將這些sdk接入到本身遊戲中時,則又要再次耗費巨大的時間和人力成本。聚合sdk正是基於這種狀況下,纔會被提出的概念。咱們但願的,只是一個簡單粗暴的,能夠快速接入,沒啥技術經驗的人也能使用的一鍵式自動打包工具,只須要傳一個工程文件,就能夠直接出渠道包。框架
那麼,咱們就長話短說,咱們來看看,咱們要實現這套聚合的sdk,須要作哪些事情。工具
主要需求:網站
首先,咱們須要明確想要作成的東西是個怎麼樣產品.net
1.遊戲客戶端和遊戲服務端,只須要關注遊戲自己內容,無需關注不一樣渠道的sdk差別性,下降渠道sdk和遊戲客戶端的耦合性線程
2.公司應用必需要支持多個項目的統一管理,但不能有集中式單點的風險,數據須要分離和整合不一樣的表現code
3.公司發展後各類部門的交互流程和人員成本,讓非技術的運營人員也能夠打包,而且使用流程管理來進行出包版本管控
4.該聚合sdk必需要有擴展性,能應對往後新增的各類其餘類型sdk。
主要模塊:
針對這些需求,咱們將產品分割爲如下幾個大模塊。
1.用做客戶端接入部分的統一框架 SDK_Client
2.用做服務端統一的邏輯轉發和處理中心SDK_Server
3.用做打包功能的邏輯和多線程的任務調度SDK_Package
4.用戶可視化操做界面和功能配置界面SDK_Manager
這四大模塊,是咱們最終的目標,一鍵式傻瓜化打包工具的組成。讓用戶只要傳一個遊戲項目,就能直接打出指定的渠道包。
主要的關係圖:
接下來咱們來看看主要的幾個關係圖
咱們看看 packager的主要工做原理
1.取得相關遊戲的配置文件
2. 取得指定渠道的配置文件
3.利用打包腳本,合成渠道包
4.提供渠道包的下載連接
manager和package組成客戶端打包工具,manager負責管理和配置,package負責編譯,關係圖:以下
1.用戶經過manager,上傳一個原始的遊戲
2.manager根據用戶操做,找到相應的渠道SDK,渠道參數
3.manager分配給packager組打包的任務
4.packager 組找到空閒的packager節點,將該任務指定到具體的pakcager
5.選中的packager根據接收到的任務以及參數,打出指定渠道包
sdk的client和server與遊戲客戶端和服務端的交互架構
能夠看到相對的結構圖如上
1. 遊戲渠道包,包含了遊戲客戶端以及聚合sdk客戶端,渠道sdk三部分
2. 遊戲客戶端,將聚合sdk客戶端發送過的sdk數據轉發給遊戲服務端
3. 遊戲服務端,將遊戲客戶端發送的sdk數據轉發給聚合sdk服務端
4. 聚合sdk服務端和渠道sdk服務端進行邏輯交互,以及相關的數據有效性驗證,驗證經過後,發回給遊戲服務端正確的數據結果
5. 遊戲服務端根據聚合sdk服務端返回的數據結果,處理遊戲內的邏輯
6. 遊戲客戶端,將遊戲服務端返回的通過驗證後的sdk數據結果轉發給聚合sdk客戶端
以上全部,是咱們對一套聚合sdk的整體架構以及構思的分析。整套咱們最終目標要作成的一鍵式傻瓜化打包工具,是須要一步一個腳印,聚沙成塔堆積出來的。可是有了明確的思路和方向,相信衆讀者會對聚合sdk再也不陌生,也能更好的使用聚合sdk。
聚合sdk的其中每個模塊的具體實現,須要注意點,咱們會在往後慢慢分析。
這個項目已開源,你們有興趣能夠本身研究或者參照項目編寫本身的聚合SDK