在上一篇《TypeSDK安卓平台一致化接口構造及思緒》中我們論述了安卓平台的接口構造和思緒。在這裡我們將論述IOS平台下的接口構造和思緒。
IOS平台次要是基於Objective-C的言語,總體的設計思緒和安卓類似,詳細完成的細節和接口的構造會有纖細的不同。
在IOS平台,我們會觸及到局部的c語法以及oc和c的混編,絕對安卓需求留意點會多一點。
那好,接上去我們來詳細的論述一下接口的構造,以及設計的思緒。
和安卓一樣,我們先來看看需求思索的幾點需求。
一、相關的需求
iOS平台的一致化接口,我們需求思索到詳細以下的幾點:
1.對外需求有一致的接口,保證不同的渠道sdk 對同一個游戲來說,是調用相反的接口,傳遞相反的參數
2.對內需求有一套擴展性很好的框架,可以應對不同渠道的sdk差別性
二、設計的模塊
那麼針對這些思索點,安卓平台的一致化接口,我們將次要分紅以下幾個局部來設計:
1.根底架構設計
2.詳細渠道完成類
3.一致化對外平台接口
4.跨平台交互的設計
三、詳細的細節
我們次要完成了這麼一套構造
1.我們創立通用的根底籠統類(BaseBonjour)。
基於oc的特性,我們對根底類添加了2個protocol,一個是必需完成的根底接口,一個是可以不去完成的拓展接口的聲明
1.1 必需完成的根底接口,我們做如下的定義
1.1.1 初始化接口@required -(void)InitSDK:(NSString*)_in_data;
1.1.2 登錄接口 @required -(void)ShowLogin:(NSString*)_in_data;
1.1.3 登出接口@required -(void)ShowLogout;
1.1.4 領取接口@required -(NSString*)PayItem:(NSString*)_in_data;
1.1.5 顯示分享接口@required -(void)ShowShare:(NSString*)_in_data;
1.2 非必需完成的拓展接口
1.2.1 獲取緩存在ios層的用戶信息 @optional -(NSString*)GetUserData;
1.2.2 獲取本地渠道的配置 @optional -(NSString*)GetPlatformData;
1.2.3 依據函數名,調器具體完成類中的函數@optional -(NSString*)DoAnyFunction:(NSString*)_funcName withArgs:(NSString*)_json_string;
1.2.4 大退游戲(殺進程)@optional -(void)ExitGame;
1.2.4 提交玩家數據 -(void)SetPlayerInfo:(NSString*)_in_data;
2.我們依據每一個渠道的sdk不同,獨自創立每個渠道自己的完成類Bonjour_xx。
2.1 這個類承繼通用的框架基類(BaseBonjour)。
2.2 在該框架下,完成基類一切的必需完成的籠統接口。假如沒有該接口的功用,也需求做出相應的處置,例如輸入log日志。
2.3 同時該類可以添加渠道自有的特殊接口(例如獲取好友列表)
3.發布平台有一個一致的給內部調用接口完成的類:TypeSDK
3.1該類作為一個單例類,可以給在任何中央方便的提供接口的調用。
3.2 該類的單利對象是框架基類對象(BaseBonjour)
3.3 該類不是框架基類對象的子類
3.4 經過配置文件,應用類名,創立基類對象的子類,該子類是該渠道的詳細完成類,該子類賦值給單利對象
3.5 一切的接口調用,經過獲取TypeSDK類的單利對象來調用
詳細的完成,可以參照以下一局部代碼
單例對象
點擊(此處)折疊或翻開
static TypeBaseBonjour*sharedInstance=nil;
獲取單例對象的靜態函數
點擊(此處)折疊或翻開
@implementation TypeSDK
詳細渠道完成類
點擊(此處)折疊或翻開
@interface TypeBonjour_demo:TypeBaseBonjour
經過類名靜態創立子類對象
點擊(此處)折疊或翻開
Class_cls=NSClassFromString(_type_name);
這樣 我們就可以讓根底框架,詳細完成,對外調用接口三方的耦合性進一步的降低。這三局部是可以完全各自獨立維護。
4.跨平台交互局部
跨平台交互我們需求思索兩個方面
a.如何將從發布平台調用開發平台函數
b.如何將從開發平台調用發布平台函數
4.1.在ios層,我們只需求將需求給到unity調用的函數
ios給unity調用,需求寫c的接口。c和oc混編,需求吧相關的類文件後綴名從.m修正成.mm
提供以下代碼參考
點擊(此處)折疊或翻開
@implementation TypeSDKExtern
有關c接口代碼的一個留意點
一切的前往值,需求前往的是常量,所以不能直接把原始oc代碼裡的char*前往出去,需求拷貝一份常量前往出去
切記c的代碼不要寫在oc的類聲明外面
另無情提供2個十分有用的小函數
點擊(此處)折疊或翻開
#ifdefined(__cplusplus)
第一個函數是把 char*類型數據轉換成nsstring*
第二個函數是 char*的拷貝函數
在unity中的調用oc層面的c接口舉例
點擊(此處)折疊或翻開
[DllImport("__Internal")]
在cocos2dx中調用c接口舉例
點擊(此處)折疊或翻開
extern void CallShowLogin();
4.2.在unity層,提供了我們通用的跨平台調用接口
點擊(此處)折疊或翻開
extern void UnitySendMessage(constchar*,constchar*,constchar*);
我們只需求知道unity局部用來接納音訊的腳本名字,需求執行的腳本函數名,以及傳遞的參數,就可以調用unity的呼應函數了。
以下給出調用舉例
點擊(此處)折疊或翻開
-(void)SendEvent:(NSString*)_notify_class_name withJson:(NSString*)_json_string
綜上ios向unity平台傳遞數據和調用函數,次要經過音訊機制發送音訊
unity向安ios平台傳遞參數和調用函數,則是直接調用oc層的c接口。
以上就是我們ios發布平台的聚合sdk設計思緒細節,下一章我們將講述unity聚合sdk的設計思緒細節。
這個項目已開源,大家有興味可以自己研討或許參照項目編寫自己的聚合SDK
項目地址:https://code.csdn.net/typesdk_code
項目地址:https://github.com/typesdk
【TYPESDK手游聚合SDK客戶端設計思緒與架構之三:iOS平台一致化接口構造及思緒】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!