游戏极客社区程序员其它技术点

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

2017-09-01  本文已影响876人  Ampaw

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

简介

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

总体架构

总体架构.png

需求分析

设计模块

实现方案

  这里主要使用“反射原理”,将渠道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;

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

上一篇下一篇

猜你喜欢

热点阅读