iOS ShareSDK橋接技術(shù)

前言

在游戲開發(fā)中,難免會出現(xiàn)與原生平臺有交互才能完成一些特定的必要的功能。比如iOS的內(nèi)購功能奉狈,或者你想用一款第三方SDK鳖昌,但是此SDK卻沒有對應平臺的版本备畦、并且未提供插件的情況下,就會涉及到與第三方平臺的交互许昨。

Unity3D

簡介:Unity3D(以下簡稱U3D)是由Unity Technologies開發(fā)的一個讓玩家輕松創(chuàng)建諸如三維視頻游戲懂盐、建筑可視化、實時三維動畫等類型互動內(nèi)容的多平臺的綜合型游戲開發(fā)工具糕档,是一個全面整合的專業(yè)游戲引擎莉恼。

Unity3D調(diào)用原生iOS接口

Unity3D 無法直接調(diào)用iOS原生的OC或者swift語言,但是Unity3D使用的C#可以和C進行交互速那。而C是可以和OC進行交互的俐银。從而就可以實現(xiàn)C#調(diào)用OC。

以ShareSDK的Unity橋接為例:

先定義 分享的C語言方法

void __iosShareSDKShare (int reqID, int platType, void *content, void *observer){

? ? NSMutableDictionary *shareParams = __getShareParamsWithString(contentStr);

? ? [ShareSDK share:platType

? ? ? ? parameters:shareParams

? ? onStateChanged:nil];

}

C#中則可以像下面代碼一樣進行引入和調(diào)用:

using System.Runtime.InteropServices;

[DllImport("__Internal")]private static extern void __iosShareSDKShare (int reqID, int platType, string content, string observer);

其中DllImport為一個Attribute端仰,目的是通過非托管方式將庫中的方法導出到C#中進行使用捶惜。而傳入"__Internal"則是表示這個是一個靜態(tài)庫或者是一個內(nèi)部方法。通過上面的聲明荔烧,這個方法就可以在C#里面進行調(diào)用了

比如Unity游戲需要分享的時候直接調(diào)用下面方法就可以了:

voidShareContent(intreqID, PlatformType platform, ShareContent content){

? ? __iosShareSDKShare (reqID, (int)platform, content.GetShareParamsStr(), _callbackObjectName);

}

iOS 調(diào)用Unity的接口

在特定場景下也會有iOS接口調(diào)用Unity的C#接口的情況售躁,比如分享后回調(diào)的分享結(jié)果就要傳遞到原生的unity層。最簡單的方式是通過UnitySendMessage方法來調(diào)用Unity所定義的方法茴晋。

仍然以ShareSDK的回調(diào)為例:

在Unity的里ShareSDK.cs定義一個回調(diào)方法

private void _Callback (string data) {

? ? Debug.LogFormat ("result string = {0}", data);

}

掛載ShareSDK.cs到Main Camera中 在OC層陪捷,在ShareSDK的分享回調(diào)block執(zhí)行UnitySendMessage

void __iosShareSDKShare (int reqID, int platType, void *content, void *observer)

? ? {

? ? ? ? NSMutableDictionary *shareParams = __getShareParamsWithString(contentStr);

? ? ? ? [ShareSDK share:platType

? ? ? ? ? ? parameters:shareParams

? ? ? ? onStateChanged:^(SSDKResponseState state, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error) {

? ? ? ? ? ? NSString *resultStr = nil;

? ? ? ? ? ? // process resultStr? ? ? ? ? ? // ...? ? ? ? ? ? UnitySendMessage(observer, "_Callback", [resultStr UTF8String]);

? ? ? ? }];

? ? }

其中 observer值為掛載的"Main Camera"

注意:UnitySendMessage方式無法同步獲取返回值,并且必須要掛載到對象后才能調(diào)用诺擅,復雜需求可以使用 非托管的方式進行交互市袖,具體可以參考:http://www.reibang.com/p/1ab65bee6692

Cocos2d

是一個基于MIT協(xié)議的開源框架,用于構(gòu)建游戲、應用程序和其他圖形界面交互應用苍碟【泼伲可以讓你在創(chuàng)建自己的多平臺游戲時節(jié)省很多的時間。

由于主流的cocos2d游戲開發(fā)語言是C++,而C++ 和OC是可以直接交互的,只需把OC的實現(xiàn)文件.m修改為.mm即可微峰,那么只需要定義一個C++的接口直接調(diào)用OC既可

typedef void(*C2DXShareResultEvent) (int reqID, C2DXResponseState state, C2DXPlatType platType, C2DXDictionary *res);void C2DXiOSShareSDK::shareContent(int reqID,C2DXPlatType platType, C2DXDictionary *content,bool useClientShare, C2DXShareResultEvent callback) {

? ? NSMutableDictionary *parameters = convertPublishContent(content);

? ? [ShareSDK share:(SSDKPlatformType)platType

? ? ? ? parameters:parameters

? ? onStateChanged:^(SSDKResponseState state, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error) {

? ? // process callback ...? ? //callback? ? callback(reqID,(C2DXResponseState)state,(C2DXPlatType)platType,userInfoDict);

? ? }];

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舷丹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蜓肆,更是在濱河造成了極大的恐慌颜凯,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仗扬,死亡現(xiàn)場離奇詭異症概,居然都是意外死亡,警方通過查閱死者的電腦和手機早芭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門彼城,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人退个,你說我怎么就攤上這事募壕。” “怎么了语盈?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵司抱,是天一觀的道長。 經(jīng)常有香客問我黎烈,道長习柠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任照棋,我火速辦了婚禮资溃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烈炭。我一直安慰自己溶锭,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布符隙。 她就那樣靜靜地躺著趴捅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪霹疫。 梳的紋絲不亂的頭發(fā)上拱绑,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音丽蝎,去河邊找鬼猎拨。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的红省。 我是一名探鬼主播额各,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吧恃!你這毒婦竟也來了虾啦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤痕寓,失蹤者是張志新(化名)和其女友劉穎傲醉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厂抽,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年丁眼,在試婚紗的時候發(fā)現(xiàn)自己被綠了筷凤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡苞七,死狀恐怖藐守,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蹂风,我是刑警寧澤卢厂,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站惠啄,受9級特大地震影響慎恒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜撵渡,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一融柬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧趋距,春花似錦粒氧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至翼雀,卻和暖如春饱苟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背狼渊。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工掷空, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓坦弟,卻偏偏與公主長得像护锤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子酿傍,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容