引言:本文旨在提供讀者制作一個自己的聚合sdk的思路,拋磚引玉,讓更多的讀者對聚合sdk有好的理解。
在上一篇《TypeSDK總體思路和架構(gòu)》中,簡述了一個聚合sdk,需要哪些模塊,實現(xiàn)哪些功能,模塊之間的相互關(guān)系是怎么樣的。
有了基本思路和架構(gòu),那么任何一個程序一個解決方案,都會有一個基本的設(shè)計原則。作為聚合sdk,我們要秉承哪些基本原則呢。
1.和游戲項目的低耦合性
2.聚合sdk具有易用性
3.具有較強(qiáng)的拓展性
1.先來探討怎么去做低耦合性。
作為聚合sdk,最直接需要面對的問題就是跨平臺問題。我們要先有一個概念,那就是游戲的開發(fā)平臺以及游戲的發(fā)型平臺是完全不同的。游戲的開發(fā)平臺,是指游戲用什么語言,在什么樣的生產(chǎn)環(huán)境開發(fā)。游戲的發(fā)行平臺,指的是游戲在什么樣的終端上運行。
移動游戲主要的發(fā)布平臺是iOS、安卓兩大平臺,windows phone占有量太小,國內(nèi)幾乎沒有發(fā)行渠道。
游戲主流開發(fā)平臺包括了unity、cocos2dx。而使用原生安卓和ios用來開發(fā)軟件的相對多。鑒于以上這些我們將原生Android和ios作為發(fā)布基礎(chǔ),并正對unity和cocos2dx提供開發(fā)封裝。
實現(xiàn)的邏輯關(guān)系如下:
1. 作為游戲的開發(fā)者,在游戲客戶端層面,只需要關(guān)注開發(fā)平臺的sdk接口調(diào)用邏輯,而不用關(guān)心sdk接口的實現(xiàn)邏輯。Sdk接口的申明,由typesdk提供的typesdkclient部分給出
2. 作為聚合sdk接入層,接入各大渠道自己的sdk代碼實現(xiàn)部分,即各大發(fā)布平臺的實現(xiàn)層,只需要在typesdk的框架下,實現(xiàn)各個邏輯接口的功能,而不用關(guān)心具體是誰去調(diào)用,是怎么調(diào)用的。
3. 而開發(fā)平臺的接口申明,發(fā)布平臺的統(tǒng)一接口的規(guī)范,這一整套,就是聚合sdk客戶端部分的主要框架。
4. 接口的調(diào)用,和接口的實現(xiàn)完全的分離,實現(xiàn)了游戲邏輯代碼和渠道sdk的解耦。整個聚合sdk體系相互獨立,又相互有關(guān),使得整體的功能實現(xiàn),可以達(dá)到模塊化,功能化,區(qū)分話的目的。讓整個項目可以由多人共同開發(fā),大大提高開發(fā)進(jìn)度。
2.如何做聚合sdk具有易用性
人們都愛和簡單的人相處,人們也愛使用簡易容易上手的東西。iphone的成功,其中有一點那就是其外觀的簡潔,其系統(tǒng)的易于理解。
聚合SDK使用對象有兩類,1.
說到簡單,不得不提及一個和簡單有關(guān)的詞,統(tǒng)一,凡事簡單的事物,都能讓用戶很快的形成統(tǒng)一的使用習(xí)慣。那么從代碼設(shè)計上來說,統(tǒng)一中最具有代表性的就是,程序中的單例模式。
我們設(shè)計一個單利的類(TypeSDKClass),讓用戶的一切接口調(diào)用,回調(diào)函數(shù)接收,事件處理等等事物,都從這一個入口出發(fā),也只從這一個入口導(dǎo)出,其內(nèi)部結(jié)構(gòu)無論如何復(fù)雜,用戶不需要關(guān)心。他們只要記得,我想做一件事,我找到那個單例TypeSDKClass 從他提供的方法和需要實現(xiàn)的回調(diào)中,都能滿足我的需求就行。
并且,這個單例對象TypeSDKClass 不需要關(guān)心他如何創(chuàng)建,如何銷毀,只需要我想用的時候,隨時隨地能用。
有了單例對象為主體,在程序設(shè)計中,不可避免的是數(shù)據(jù)傳遞。
最易用的易懂的數(shù)據(jù)結(jié)構(gòu),hashmap類應(yīng)該算其中之一。我們程序提供接口中傳遞的參數(shù),使用的數(shù)據(jù)結(jié)構(gòu)是一個經(jīng)過包裝過的hashmap,有一套容易理解的通過key來存取對應(yīng)的value值。
用戶并不需要關(guān)心這個數(shù)據(jù)結(jié)構(gòu)在跨平臺傳遞時候是如何工作的,只需要在使用的時候感覺容易理解,容易使用。
3.我們來說說拓展性
各大渠道的sdk都是發(fā)展的,各大發(fā)行平臺同樣也是在不斷發(fā)展的,安卓從2.0已經(jīng)成了現(xiàn)在的7.1,ios保持著一年一個大版本的穩(wěn)定節(jié)奏,新老版本的更替,部分老的接口被棄用,部分新的接口被啟用。更多的情況是,有了新的功能,來提升游戲的體驗性和功能性。
作為我們的聚合sdk,要能保持與時俱進(jìn),才能不斷綻放新的生命活力。而與時俱進(jìn)最好的辦法就是具有很強(qiáng)大的拓展性。
我們在游戲的發(fā)布平臺,需要設(shè)計一個接口,該接口可以通過函數(shù)名來調(diào)用指定的函數(shù),而該函數(shù)的參數(shù),也需要是string類型。這樣一來有幾個優(yōu)勢。
1.函數(shù)名是string類型,接入聚合sdk的cp并不需要重新的更新開發(fā)平臺(unity或者coco2dx)的聚合sdk部分,只需要新增幾個string字段就能調(diào)用函數(shù)
2.參數(shù)是string類型,那就是可以把我們之前的hashmap類型數(shù)據(jù)轉(zhuǎn)成string類型的json,既有了通用型,也不乏豐富性。
3.通過string類型函數(shù)名來執(zhí)行函數(shù),哪怕該函數(shù)不存在(例如運行設(shè)備版本過低,并不支持該功能),我們可以在發(fā)布平臺層面,做相應(yīng)的邏輯處理,而不會造成游戲的崩潰。
4.不論以后會有多少新的功能出現(xiàn),我們做到了以不變應(yīng)萬變。一招鮮吃遍天。我們只需要不斷的在運行平臺的實現(xiàn)接口層面不斷的新增新功能接口的實現(xiàn),就可以做到,在游戲客戶端部分,隨時隨地的使用到我們支持的新功能。
以上這些是博主對一套聚合sdk設(shè)計中,需要秉承的一些原則的看法,當(dāng)然肯定還有其他的原則,比如代碼規(guī)范中的hasmap數(shù)據(jù)結(jié)構(gòu)類型的key值是string類型,而string類型的內(nèi)容,要有統(tǒng)一的命名規(guī)則,這樣可以避免因為書寫的錯誤,造成數(shù)據(jù)操作的bug。
博主拋磚引玉,希望更多的讀者不吝言辭,可以提出你們的看法和建議。
在下一篇,我們會主要講解發(fā)行平臺層面(安卓和ios)的聚合sdk實現(xiàn)詳細(xì)思路和結(jié)構(gòu)。讓大家都能對聚合sdk有自己的看法和理解,最終能做出屬于你自己的聚合sdk。
這個項目已開源,大家有興趣可以自己研究或者參照項目編寫自己的聚合SDK
項目地址:https://code.csdn.net/typesdk_code
項目地址:https://github.com/typesdk
更多建議: