TYPESDK手游聚合SDK客户端设计思路和架构的三:iOS平台统一化接口结构与思路

       2.怎么样做聚合sdk具有易用性

@implementation TypeSDKExtern

@end

#if defined(__cplusplus)
extern "C"
{
#endif

    void CallShowLogin ()
    {

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


#if defined(__cplusplus)
}
#endif

       实现的逻辑关系如下:

       3.统一化对外平台接口

      
我们以玩耍之揭晓平台,需要规划一个接口,该接口可以由此函数称呼来调用指定的函数,而拖欠函数的参数,也亟需是string类型。这样一来有几乎单优势。

 

      
以上这些是博主对同套聚合sdk设计被,需要秉承的一部分尺度的见地,当然肯定还有另外的法,比如代码规范中的hasmap数据结构类型的key值是string类型,而string类型的情节,要发生统一的命名规则,这样好避以修的失实,造成数操作的bug。

 
 

       2.聚合sdk具有易用性

       1.2.2 获取当地渠道的布局 @optional -(NSString*)GetPlatformData;

4.  接口的调用,和接口的落实完全的分开,实现了戏逻辑代码和渠道sdk的解耦。整个聚合sdk体系相独立,又互为有关,使得整体的职能实现,可以达标模块化,功能化,区分话的目的。让任何项目可由多总人口共同开发,大大提高开发进度。

#if defined(__cplusplus)
extern "C"{
#endif

    //字符串转化的工具函数

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

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


#if defined(__cplusplus)
}
#endif

       博主抛砖引玉,希望更多之读者不吝言辞,可以提出你们的见地和建议。

      
ios给unity调用,需要写c的接口。c和oc混编,需要吧相关的切近公事后缀名从.m修改成.mm

 

       2.1 这个近乎继承通用的框架基类(BaseBonjour)。

这路早就开源,大家发出趣味可以好研究或者参照项目编制好之聚合SDK
品类地址:https://code.csdn.net/typesdk_code
类型地址:https://github.com/typesdk

       1.1.5 显示分享接口@required
-(void)ShowShare:(NSString*)_in_data;

      
游戏主流开发平台包括了unity、cocos2dx。而用原生安卓与ios用来开发软件的相对多。鉴于上述这些我们将原生Android暨ios作为发布基础,并正对unity和cocos2dx提供开发封装。

其他发内容资2单可怜管用的有些函数

      
在上平等首《TypeSDK总体思路以及架构》中,简述了一个聚合sdk,需要哪模块,实现怎样功效,模块之间的相互关系是哪些的。

一如既往、相关的需要

      
作为我们的聚合sdk,要会保全与时俱进,才会循环不断开放新的身活力。而与时俱进最好的措施就是富有特别有力的拓展性。

extern void CallShowLogin ();

void showLogin()
{
       CallShowLogin();
}

      
1.函频称为是string类型,接抱聚合sdk的cp并不需要重新的创新支出平台(unity或者coco2dx)的聚合sdk部分,只待新增几单string字段就能够调用函数

单例对象

2.  看成聚合sdk接入层,接入各大渠道自己的sdk代码实现有,即各级大发布平台的贯彻交汇,只需要以typesdk的框架下,实现各个逻辑接口的效益,而非用关爱具体是哪个去调用,是怎调用的。

       3.1此类作为一个单例类,可以吃在外地方便宜之供接口的调用。

      
4.不论以后会有些许新的效能出现,我们完成了以不变应万变。一造成鲜吃遍天。我们只是需要持续的在运作平台的兑现接口层面不断的新加新力量接口的落实,就足以成功,在打闹客户端有,随时随地的利用到我们支撑之初效能。

至于c接口代码的一个瞩目点

1.  当娱乐之开发者,在嬉戏客户端层面,只需要关怀开发平台的sdk接口调用逻辑,而休用关爱sdk接口的实现逻辑。Sdk接口的表明,由typesdk提供的typesdkclient部分为有

1.咱们创建通用的底蕴抽象类(BaseBonjour)。

      

3.发表平台发生一个统一的给外部调用接口实现之类似:TypeSDK

      
我们规划一个单利的近乎(TypeSDKClass),让用户的一切接口调用,回调函数接收,事件处理等等事物,都起即一个进口出发,也只有于这一个入口导出,其内部结构无论如何复杂,用户不需要关怀。他们假设记得,我思念做同样起事,我找到好单例TypeSDKClass
从外供的道以及消贯彻的回调中,都能够满足自己之急需便行。

       1.1.4 支付接口@required
-(NSString*)PayItem:(NSString*)_in_data;

 

       1.对外需发统一之接口,保证不同之沟渠sdk
对同一个嬉戏吧,是调用相同之接口,传递相同之参数

      
最爱用底易懂的数据结构,hashmap类应该算其中某。我们先后提供接口中传递的参数,使用的数据结构是一个透过包装了的hashmap,有一致仿好掌握的经过key来存取对应的value值。

4.跨平台相互部分

       3.颇具比较强的拓展性

此路早就开源,大家产生趣味可以协调研究或者参照项目编制好之聚合SDK
类型地址:https://code.csdn.net/typesdk_code
类型地址:https://github.com/typesdk

       3.我们的话说拓展性

       2.对内需要发出平等法扩展性很好的框架,可以回答不同渠道的sdk差异性

      
移动游戏主要的颁布平台是iOS、安卓少好平台,windows
phone占有量太小,国内几乎从未发行渠道。

      
那么对这些考虑点,安卓平台之统一化接口,我们用主要分为以下几独片来设计:

      
各大渠道的sdk都是提高的,各大批发平台同样也是于不停向上之,安卓从2.0曾成了今日底7.1,ios保持着平等年一个分外版本的泰节奏,新老版的轮番,部分老的接口被弃用,部分新的接口被启用。更多之情状是,有了新的功能,来提升游戏之体验性和功能性。

       2.3 同时此类可以长渠道自有的特种接口(例如获取好友列表)

      

俺们主要实现了如此一仿结构

      
用户并不需要关心这个数据结构在跨平台传递时候是怎么做事之,只需要在采用的下发好掌握,容易用。

于达到同样篇《TypeSDK安卓平台统一化接口结构及思路》中我们阐述了安卓平台的接口结构以及笔触。在此地我们以阐述iOS平台下之接口结构与笔触。

       有矣单例对象也主体,在先后设计受到,不可避免的凡数量传递。

       1.1.2  登录接口 @required
-(void)ShowLogin:(NSString*)_in_data;

引言:本文旨在提供读者制作一个要好之聚合sdk的笔触,抛砖引玉,让再多的读者对聚合sdk有好之知情。

       3.4
通过部署文件,利用类名,创建基类对象的子类,该子类是该水道的切实可行落实类似,该子类赋值给单利对象

      
3.经string类型函数叫来施行函数,哪怕该函数不设有(例如运行设备版本过小,并无支持该功能),我们得以当昭示平台层面,做相应的逻辑处理,而未见面促成游戏的夭折。

       以下被起调用举例

      

@interface TypeBonjour_demo : TypeBaseBonjour
@end

 图片 1

       和安卓扳平,我们事先来探望需要考虑的几乎接触要求。

       1.事先来探索怎么去做没有耦合性。

       iOS平台的统一化接口,我们要考虑到具体以下的几乎接触:

聚合SDK使用对象来星星点点像样,1.

       1.2.4 大退游戏(杀进程) @optional -(void)ExitGame;

      
2.参数是string类型,那就是好把我们前面的hashmap类型数据变动成string类型的json,既出矣通用型,也不乏丰富性。

切实的落实,可以参见以下部分代码

       并且,这个单例对象TypeSDKClass
不欲关怀他怎么着创造,如何销毁,只待自家眷恋用底时刻,随时随地能用。

      
在ios平台,我们见面提到到一些的c语法以及oc和c的混编,相对安卓需要注意点见面多一些。

      
说及概括,不得不提及一个跟简易有关的歌词,统一,凡事简单的事物,都能够于用户迅速的形成统一之采取习惯。那么自从代码设计及来说,统一被极具有代表性的即是,程序中的单例模式。

4.1.当ios层,我们只需要以需要吃到unity调用的函数

      
人们都容易与省略的人数相处,人们也爱使简便容易上手的事物。iphone的中标,其中起少数那即便是那个外观的凝练,其系统的善理解。

当unity中之调用oc层面的c接口举例

      
在产一样篇,我们会重点教学发行平台层面(安卓与ios)的聚合sdk实现详细思路以及结构。让大家还能够针对聚合sdk有自己之眼光以及了解,最终会做出属于你协调的聚合sdk。

       4.过平台相互的统筹

      
作为聚合sdk,最直接用对的题材即使是超平台问题。我们若事先来一个定义,那便是耍的开平台和游戏之发型平台是完全不同的。游戏之支出平台,是恃耍用什么语言,在哪些的产条件出。游戏之发行平台,指的凡游戏以怎样的顶峰上运行。

@implementation TypeSDK

+(TypeBaseBonjour*)GetIns
{

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

       1.暨戏类之低耦合性

[DllImport("__Internal")]
private static extern void CallShowLogin ();
public void ShowLogin()
{
       CallShowLogin();
}

3.  如果付出平台的接口申明,发布平台的联合接口的正式,这身,就是聚合sdk客户端部分的基本点框架。

       1.1 必须实现之基础接口,我们开如下的概念

 

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

      
有矣基本思路和搭,那么任何一个次一个解决方案,都见面产生一个主导的筹划基准。作为聚合sdk,我们若秉承哪些基本条件为。

咱一味需要明白unity部分据此来接过信息的剧本名字,需要实践之脚本函数曰,以及传递的参数,就足以调用unity的响应函数了。

4.2.以unity层,提供了咱们通用的跨平台调用接口

首先单函数是将 char*路数据易成为nsstring*

      
所有的返值,需要回到的是常量,所以无克一直拿原始oc代码里的char*回到下,需要拷贝一卖常量返回下

              a.如何将起披露平台调用开发平台函数

       1.1.3 登出接口 @required -(void)ShowLogout;

  

      
ios平台要是基于Objective-C的语言,总体的计划思路以及安卓类似,具体贯彻的细节及接口的构造会起一线之不比。

Class _cls = NSClassFromString(_type_name);

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

      
基于oc的表征,我们本着基础类添加了2只protocol,一个凡要兑现的根基接口,一个是好免错过实现的进行接口的发明

extern void UnitySendMessage(const char *, const char *, const char *);

              b.如何将由开发平台调用发布平台函数

static TypeBaseBonjour* sharedInstance = nil;

       3.2 该类的单利对象是框架基类对象(BaseBonjour)

老三、具体的底细

       2.2
在拖欠框架下,实现基类所有的必备实现之纸上谈兵接口。如果无拖欠接口的职能,也欲做出相应的处理,例如输出log日志。

图片 2

       1.2.3 根据函数叫,调用具体实现类似吃的函数@optional
-(NSString*)DoAnyFunction:(NSString*)_funcName
withArgs:(NSString*)_json_string;

       2.切实可行渠道实现类似

这样
我们即便可叫基础框架,具体落实,对外调用接口三方的耦合性进一步的降。这三有的是得了各自独立维护。
  

      
以上就是咱们ios发布平台的聚合sdk设计思路细节,下同样章我们以讲述unity聚合sdk的规划思路细节。

具体渠道实现类似

       切记c的代码不要写以oc的接近申明里面

       综上ios向unity平台传递数据和调用函数,主要透过信息机制发送信息

2.我们根据各一个沟的sdk不同,单独创建每个渠道自己之落实类Bonjour_xx。

       1.2 非必需实现的拓展接口

       1.2.1 获取缓存在ios层的用户信息 @optional
-(NSString*)GetUserData;

       那好,接下去我们来具体的阐述一下接口的构造,以及规划的思绪。

老二、设计之模块

       1.2.4 提交玩家数量 -(void)SetPlayerInfo:(NSString*)_in_data;

       提供以下代码参考

在cocos2dx中调用c接口举例

获取单例对象的静态函数

       unity向安ios平台传递参数与调用函数,则是直调用oc层的c接口。

       1.1.1 初始化接口 @required -(void)InitSDK:(NSString*)_in_data;

       3.3 该类不是框架基类对象的子类

       1.基础架构设计

       3.5 所有的接口调用,通过取得TypeSDK类的单利对象来调用

       跨平台相互我们要考虑个别只面

第二独函数是 char*的拷贝函数

经过类名动态创建子类对象

发表评论

电子邮件地址不会被公开。 必填项已用*标注