iOS手游聚合SDK设计思路与架构实现
2017-09-01 本文已影响876人
Ampaw
在接入众多渠道SDK的过程中,发现了对接的繁琐性,使之觉得烦恼。于是,我查阅了一些有关聚合处理的案例,但多数是关于Android的实现,这也只能是参考其中的思想。经过近一个月的学习与开发,终于完成了聚合SDK的实现,现已正式投入使用。在此,抽个时间来做一个初步的总结,希望对有同样需求的朋友有所帮助!
简介
随着手游行业的蓬勃发展,不论是从研发游戏、运营游戏,还是发行游戏,维护相关的平台,整个行业都在不断的壮大。正因为行业规模的庞大且新兴,很多事物并没有统一的业界标准。从而,使得任何一款游戏,要最终推到用户手上,不可避免的就是需要与各大渠道打交道。无论你是独立发行,还是联合运营,或多或少都会和App Store、国内各大发行渠道打交道。而与之打交道最直接的交互,就是需要接入相对应的SDK模块。
由于,众多渠道的SDK良莠不齐,作为游戏开发商的CP,尤其是众多中小型CP,第一次接入几家甚至几十家的渠道SDK,他们需要花费巨大的人力、财力和时间,而当渠道SDK更新,又需要将这些SDK再次接入游戏中。针对以上存在的问题,使用聚合的思想来实现这些繁琐的操作,使我们可以得到一个简单粗暴,可快速接入的聚合SDK。
聚合SDK作为一个统一接入框架,那么它所面对的需求场景就是同一款游戏接入多个渠道,通过聚合控制得到接入不同渠道的游戏。
总体架构
总体架构.png需求分析
- 游戏客户端 和 游戏服务端,只需关注游戏自身的内容,无需关注不同渠道SDK的差异性,降低渠道SDK和游戏客户端的耦合性;
- 聚合目的是统一处理多渠道SDK,对外接口统一,保证不同渠道SDK对同一款游戏来说,是调用相同的接口,传递相同的数据,使CP的接入变得简易化;
- 聚合SDK必须具备扩展性,能应对日后新增的各种其他类型SDK。
设计模块
- 统一化基础架构设计;
- 具体渠道实现管理类;
- 统一化对外开放接口。
实现方案
这里主要使用“反射原理”,将渠道SDK以资源文件的形式来加载。
具体内容
-
统一化基础架构设计
统一化基础架构设计.png -
具体渠道实现管理类
(1)必须实现基础接口
/**
初始化
@param gamekey 游戏Key
*/
+ (void)commonSdk_InitWithGamekey:(NSString *)gamekey;
/**
登录
*/
+ (void)commonSdk_ShowLogin;
/**
注销
*/
+ (void)commonSdk_ShowLogout;
/**
支付
@param payInfo 支付信息
*/
+ (void)commonSdk_StartPay:(NSDictionary *)payInfo;
(2)非必须实现扩展接口
/**
退出应用
*/
+ (void)commonSdk_ShowExit;
/**
提交玩家数据
@param playerInfo 玩家数据
*/
+ (void)commonSdk_SetPlayerInfo:(NSDictionary *)playerInfo;
/**
设置悬浮窗的显示与隐藏
@param status 当status = YES时,显示悬浮窗;
* 当status = NO时,不显示悬浮窗;
*/
+ (void)commonSdk_ShowOrHideFloatView:(BOOL)status;
/**
显示 用户中心
*/
+ (void)commonSdk_ShowUserCenter;
/**
配置客户端返回url处理
@param url URL Schemes
*/
+ (void)commonSdk_OpenUrl:(NSURL *)url;
/**
切换应用运行模式,采集登陆数据
@param isForeground 当isForeground = YES, 应用前台运行;
当isForeground = NO, 应用后台运行或退出程序;
@param application 当前应用
*/
+ (void)commonSdk_IsWillEnterForeground:(BOOL)isForeground OtherWiseEnterBackgroundOrExitApplication:(UIApplication *)application;
/**
获取本地渠道的配置信息
@return 配置信息
*/
+ (NSString *)commonSdk_GetPlatformData;
- 统一化对外开放接口
/**
初始化
@param gamekey 游戏Key
*/
+ (void)commonSdk_InitWithGamekey:(NSString *)gamekey;
/**
登录
*/
+ (void)commonSdk_ShowLogin;
/**
注销
*/
+ (void)commonSdk_ShowLogout;
/**
退出应用
*/
+ (void)commonSdk_ShowExit;
/**
支付
@param payInfo 支付信息
*/
+ (void)commonSdk_StartPay:(NSDictionary *)payInfo;
/**
提交玩家数据
@param playerInfo 玩家数据
*/
+ (void)commonSdk_SetPlayerInfo:(NSDictionary *)playerInfo;
/**
设置悬浮窗的显示与隐藏
@param status 当status = YES时,显示悬浮窗;
* 当status = NO时,不显示悬浮窗;
*/
+ (void)commonSdk_ShowOrHideFloatView:(BOOL)status;
/**
显示 用户中心
*/
+ (void)commonSdk_ShowUserCenter;
/**
配置客户端返回url处理
@param url URL Schemes
*/
+ (void)commonSdk_OpenUrl:(NSURL *)url;
/**
切换应用运行模式,采集登陆数据
@param isForeground 当isForeground = YES, 应用前台运行;
当isForeground = NO, 应用后台运行或退出程序;
@param application 当前应用
*/
+ (void)commonSdk_IsWillEnterForeground:(BOOL)isForeground OtherWiseEnterBackgroundOrExitApplication:(UIApplication *)application;
/**
获取本地渠道的配置信息
@return 配置信息
*/
+ (NSString *)commonSdk_GetPlatformData;
如果有问题,欢迎留言。谢谢!😄