在遊戲開發的最後,都會涉及到接 SDK 的工作,每個人也都有自己不同的解決方案。在這裡将我自己的做法介紹給大家,僅供參考。
SDK 主要實作幾個功能:
- 用一個變量切換不同管道。
- 屏蔽所有管道的差異性
類圖:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SOlNjYkRDO5IWO2YmYhBzYiFzMmNDZ4UmNxQGN3QjNw8CX2AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL2M3Lc9CX6MHc0RHaiojIsJye.png)
目錄結構大緻為:
下面介紹一下每個類的作用
BaseChannel:
所有管道類的父類,抽象類,判斷是否用某項功能并且調用對應的功能傳回調用的結果,負責屏蔽各個管道的差異性,通過為每個功能定義一個屬性,類型為BaseXXX,然後使用的時候判斷這個屬性是否為真,如果為真會調用對應的方法。如果沒有就不必處理,或者直接傳回成功。
關鍵代碼:
SDKManager:
各個管道的工廠類,根據設定的管道号建立不同的channel。在sdk外部使用的時候使用SDKManager.getChannel().showBanner((result:booelan)=>{}) 的形式完成調用。不要根據具體平台做邏輯劃分,那樣你的代碼會越來越亂。
這裡的channelID可以有三種初始化方式:
- 在代碼中修改,好處是如果遊戲需要資源伺服器,那麼各管道資源可以公用一份,壞處是每次釋出一個管道,都需要重新編譯打包。
- 放到配置檔案中加載後讀取,好處就是釋出不同的管道隻需要在配置檔案中修改管道号。壞處就是如果需要資源伺服器,各管道不能公用一份資源。當然,如果配置不放到資源伺服器也是可以的。
- 通過url獲得。這個是h5遊戲的做法,因為不同的管道傳給遊戲的url中可以帶着管道号。
相關的資料定義如下:
功能類介紹
- BaseRewardAd: 激勵視訊的基類,抽象類,定義了所有管道的激勵視訊功能的共有方法和共有屬性。值得一提的是,該結構可以支援不同位置彈出的激勵視訊使用不同的廣告ID。
- BaseBanner:banner廣告基類,抽象類。
- BaseLogin: 登陸功能的基類
- BaseShare:分享功能的基類
- BaseInsertAd:插屏廣告的基類。
具體使用方式:以微信為例
首先建立類WXChannel 繼承 BaseChannel因為隻接了阿拉丁事件統計和分享功能,是以隻執行個體化了這兩個具體的類。其中的屬性已經在BaseChannel中聲明。