美文网首页游戏极客社区程序员其它技术点
iOS手游聚合SDK设计思路与架构实现

iOS手游聚合SDK设计思路与架构实现

作者: Ampaw | 来源:发表于2017-09-01 18:23 被阅读876次

  在接入众多渠道SDK的过程中,发现了对接的繁琐性,使之觉得烦恼。于是,我查阅了一些有关聚合处理的案例,但多数是关于Android的实现,这也只能是参考其中的思想。经过近一个月的学习与开发,终于完成了聚合SDK的实现,现已正式投入使用。在此,抽个时间来做一个初步的总结,希望对有同样需求的朋友有所帮助!

简介

  随着手游行业的蓬勃发展,不论是从研发游戏、运营游戏,还是发行游戏,维护相关的平台,整个行业都在不断的壮大。正因为行业规模的庞大且新兴,很多事物并没有统一的业界标准。从而,使得任何一款游戏,要最终推到用户手上,不可避免的就是需要与各大渠道打交道。无论你是独立发行,还是联合运营,或多或少都会和App Store、国内各大发行渠道打交道。而与之打交道最直接的交互,就是需要接入相对应的SDK模块。
  由于,众多渠道的SDK良莠不齐,作为游戏开发商的CP,尤其是众多中小型CP,第一次接入几家甚至几十家的渠道SDK,他们需要花费巨大的人力、财力和时间,而当渠道SDK更新,又需要将这些SDK再次接入游戏中。针对以上存在的问题,使用聚合的思想来实现这些繁琐的操作,使我们可以得到一个简单粗暴,可快速接入的聚合SDK。
  聚合SDK作为一个统一接入框架,那么它所面对的需求场景就是同一款游戏接入多个渠道,通过聚合控制得到接入不同渠道的游戏。

总体架构

总体架构.png

需求分析

  • 游戏客户端 和 游戏服务端,只需关注游戏自身的内容,无需关注不同渠道SDK的差异性,降低渠道SDK和游戏客户端的耦合性;
  • 聚合目的是统一处理多渠道SDK,对外接口统一,保证不同渠道SDK对同一款游戏来说,是调用相同的接口,传递相同的数据,使CP的接入变得简易化;
  • 聚合SDK必须具备扩展性,能应对日后新增的各种其他类型SDK。

设计模块

  • 统一化基础架构设计;
  • 具体渠道实现管理类;
  • 统一化对外开放接口。

实现方案

  这里主要使用“反射原理”,将渠道SDK以资源文件的形式来加载。

具体内容

  1. 统一化基础架构设计


    统一化基础架构设计.png
  2. 具体渠道实现管理类
    (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;
  1. 统一化对外开放接口
/**
 初始化

 @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;

如果有问题,欢迎留言。谢谢!😄

相关文章

  • iOS手游聚合SDK设计思路与架构实现

      在接入众多渠道SDK的过程中,发现了对接的繁琐性,使之觉得烦恼。于是,我查阅了一些有关聚合处理的案例,但多数是...

  • 手游SDK —第三篇(架构代码实现篇)

    各位看官,上文 手游SDK— 第二篇(架构设计篇)已经介绍过了架构实现的基本思路,那废话就不多说了,进入正题,看下...

  • 手游联运聚合SDK——总体设计和思路

    很多做游戏开发的人,估计都或多或少地接过渠道SDK,什么UC,当乐,91,小米,360……据统计国内市场当前不下于...

  • 教你快速高效接入SDK——手游聚合SDK的总体思路和架构

    题记:很多做游戏开发的人,估计都或多或少地接过渠道SDK,什么UC,当乐,91,小米,360......据统计国内...

  • 任职要求

    1. 精通 iOS 平台的模块化设计架构,能够设计出 SDK 和 UI 组件方案,并实现定制化UI组件界面,动画;...

  • 鸿蒙 手游sdk 开发教程

    前言 : 各位同学的大家好 , 最近在学习鸿蒙开发, 因为我是从事手游SDK 开发的 之前也写过iOS 手游sdk...

  • Android 手游聚合SDK那些事

    前言 在安卓游戏SDK这个技术领域呆了已经有4年多,从游戏发行中的一员逐渐转为游戏研发中的一员。从开始什么都不懂的...

  • iOS 面试 - 其他

    怎么防止反编译? iOS面试题:怎么防止反编译? - 简书 埋点方案的 iOS无埋点数据SDK的整体设计与技术实现...

  • 无痕埋点方案探究

    目前埋点的设计大致有以下几种:参考 网易HubbleData无埋点SDK在iOS端的设计与实现 1、代码埋点由开发...

  • iM

    ios IM 架构设计 ios IM 网络层架构 ios 侧滑与右滑返回手势http://blog.csdn.n...

网友评论

  • master_huang:不懂的可以去参照一下U8sdk
  • 56d35fdf1a2a:大神 我最近也在研究这个 有点进牛角尖了 想问一下 做这个整合SDK是要将所有渠道SDK都放到整合SDK里面吗 调用某个渠道的时候 具体是怎么实现的呢
    Ampaw:@来自蒙塔基的罡蛋 至于“反射原理”,简单来说就通过代码来动态添加渠道sdk,通过反射处理,将渠道sdk接口映射出新的接口类来调用。
    56d35fdf1a2a:@Ampaw 大神,还是不太明白其中思路,你文章里面所提到的反射原理,把sdk当做资源文件的形式是什么意思呢,怎么实现的呢
    Ampaw:@来自蒙塔基的罡蛋 这个根据具体需求,可以放,也可以不放。调用某个渠道,可以通过聚合服务端来控制。
  • 陈康stozen:已收录《游戏Geek》

本文标题:iOS手游聚合SDK设计思路与架构实现

本文链接:https://www.haomeiwen.com/subject/luxkjxtx.html