你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> TYPESDK手游聚合SDK客戶端設計思緒與架構之三:iOS平台一致化接口構造及思緒

TYPESDK手游聚合SDK客戶端設計思緒與架構之三:iOS平台一致化接口構造及思緒

編輯:IOS開發綜合

在上一篇《TypeSDK安卓平台一致化接口構造及思緒》中我們論述了安卓平台的接口構造和思緒。在這裡我們將論述IOS平台下的接口構造和思緒。

IOS平台次要是基於Objective-C的言語,總體的設計思緒和安卓類似,詳細完成的細節和接口的構造會有纖細的不同。

在IOS平台,我們會觸及到局部的c語法以及oc和c的混編,絕對安卓需求留意點會多一點。

那好,接上去我們來詳細的論述一下接口的構造,以及設計的思緒。

和安卓一樣,我們先來看看需求思索的幾點需求。

一、相關的需求

iOS平台的一致化接口,我們需求思索到詳細以下的幾點:

1.對外需求有一致的接口,保證不同的渠道sdk 對同一個游戲來說,是調用相反的接口,傳遞相反的參數

2.對內需求有一套擴展性很好的框架,可以應對不同渠道的sdk差別性

二、設計的模塊

那麼針對這些思索點,安卓平台的一致化接口,我們將次要分紅以下幾個局部來設計:

1.根底架構設計

2.詳細渠道完成類

3.一致化對外平台接口

4.跨平台交互的設計

三、詳細的細節


TYPESDK手游聚合SDK客戶端設計思路與架構之三:iOS平台統一化接口結構及思路

我們次要完成了這麼一套構造

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

+(TypeBaseBonjour*)GetIns
{

if(nil==sharedInstance)
{
[self InitBonjourClass];
}
return sharedInstance;
}
@end


詳細渠道完成類


點擊(此處)折疊或翻開

@interface TypeBonjour_demo:TypeBaseBonjour
@end



經過類名靜態創立子類對象


點擊(此處)折疊或翻開

Class_cls=NSClassFromString(_type_name);

if(_cls&&[_cls isSubclassOfClass:[TypeBaseBonjourclass]])
{
NSLog(@"success get bonjour class");
sharedInstance=[[_cls alloc]init];
NSLog(@"share instance address %p",sharedInstance);
}



這樣 我們就可以讓根底框架,詳細完成,對外調用接口三方的耦合性進一步的降低。這三局部是可以完全各自獨立維護。

4.跨平台交互局部

跨平台交互我們需求思索兩個方面

a.如何將從發布平台調用開發平台函數

b.如何將從開發平台調用發布平台函數

4.1.在ios層,我們只需求將需求給到unity調用的函數

ios給unity調用,需求寫c的接口。c和oc混編,需求吧相關的類文件後綴名從.m修正成.mm

提供以下代碼參考


點擊(此處)折疊或翻開

@implementation TypeSDKExtern

@end

#ifdefined(__cplusplus)
extern"C"
{
#endif

void CallShowLogin()
{

[[TypeSDK GetIns]ShowLogin:@""];
}


#ifdefined(__cplusplus)
}
#endif


有關c接口代碼的一個留意點

一切的前往值,需求前往的是常量,所以不能直接把原始oc代碼裡的char*前往出去,需求拷貝一份常量前往出去

切記c的代碼不要寫在oc的類聲明外面

另無情提供2個十分有用的小函數


點擊(此處)折疊或翻開

#ifdefined(__cplusplus)
extern"C"{
#endif

//字符串轉化的工具函數

NSString*SDKCreateNSString(constchar*string)
{
if(string)
return[NSString stringWithUTF8String:string];
else
return[NSString stringWithUTF8String:""];
}

char*SDKMakeStringCopy(constchar*string)
{
if(NULL==string){
returnNULL;
}
char*res=(char*)malloc(strlen(string)+1);
strcpy(res,string);
return res;
}


#ifdefined(__cplusplus)
}
#endif



第一個函數是把 char*類型數據轉換成nsstring*

第二個函數是 char*的拷貝函數

在unity中的調用oc層面的c接口舉例


點擊(此處)折疊或翻開

[DllImport("__Internal")]
privatestatic extern void CallShowLogin();
publicvoid ShowLogin()
{
CallShowLogin();
}


在cocos2dx中調用c接口舉例


點擊(此處)折疊或翻開

extern void CallShowLogin();

void showLogin()
{
CallShowLogin();
}


4.2.在unity層,提供了我們通用的跨平台調用接口


點擊(此處)折疊或翻開

extern void UnitySendMessage(constchar*,constchar*,constchar*);



我們只需求知道unity局部用來接納音訊的腳本名字,需求執行的腳本函數名,以及傳遞的參數,就可以調用unity的呼應函數了。

以下給出調用舉例


點擊(此處)折疊或翻開

-(void)SendEvent:(NSString*)_notify_class_name withJson:(NSString*)_json_string
{
UnitySendMessage("TypeSDK",[_notify_class_name UTF8String],[_json_string UTF8String]);
}



綜上ios向unity平台傳遞數據和調用函數,次要經過音訊機制發送音訊

unity向安ios平台傳遞參數和調用函數,則是直接調用oc層的c接口。


以上就是我們ios發布平台的聚合sdk設計思緒細節,下一章我們將講述unity聚合sdk的設計思緒細節。

這個項目已開源,大家有興味可以自己研討或許參照項目編寫自己的聚合SDK
項目地址:https://code.csdn.net/typesdk_code
項目地址:https://github.com/typesdk

【TYPESDK手游聚合SDK客戶端設計思緒與架構之三:iOS平台一致化接口構造及思緒】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved