iOS之通用SDK管理平台框架

常用第三方平台SDK管理

手机上的任何APP,几乎都会看到类似的需求功能:
支持第三方平台授权登陆
支持第三方平台授权分享
支持第三方平台授权支付
等等行为

常见的是
微信,qq,新浪微博,支付宝,易信等等

如果我们直接将对应的平台SDK拉进公司A项目里,开发完毕后,下半年公司另起锅灶开启新项目,同样的工作还是要在做一次,对于公司而言,缺少的是技术积累,对我们开发而言,同样的事情再做几次,缺少的是对工作和技术的总结。于是对于在维护着公司自家几个项目的人来说,实在痛苦,每次更新sdk时,都需要反复。于是便设计了一个企业下的通用sdk管理盒子,通过Cocoapods集成版本管理,释放开发的成本,缩短相应的开发时间。

盒子设计

SDK(登陆 - 分享 - 支付)统一管理平台,What is Needed By Imp-Protocol

设计一个由配置协议统一通用Api的盒子,方法暴露如下:

1)注册到某一个平台的入口Api

2)获取某一个的平台某一种特性下的执行单例,遵守统一协议,比如
最基本的注册协议
该平台可以分享则遵守分享协议
该平台可以支付则遵守支付协议

3)相关平台 : 常用的配置如下
旨在通过协议使得各个平台均可实现相关调用入口Api
基本协议:注册协议
其他扩展协议根据不同的平台遵守和实现

QQ : 	注册协议 、 登陆协议、分享协议
微信:	注册协议 、 登陆协议、分享协议、支付协议
微博:	注册协议 、 登陆协议、分享协议
支付宝:	注册协议 、 支付协议

4)关系流程图

  										  (遵守需要实现的协议)
												  |	
												  |
												  |
Imp(平台协议实现类)  <- - - - 根据Type获取 - - - - Manager   - - - - - - 微信
												   		 - - - - - - QQ
												   		 - - - - - - 阿里支付
											          	 - - - - - - 微博

5)通过podspec文件灵活配置每个工程下需要的第三方sdk平台podfile

// Core 是盒子的基本代码,实现了一个盒子和协议内容。
// WithXXX 是对应平台的基本逻辑实现
// 通过编写podspec完成灵活配置平台和依赖关系
# 盒子
#  pod 'SDKKit/Core',		:git => 'git@std.xxx.cn:Lib/SDKKit.git'
#  pod 'SDKKit/WithWechat',	:git => 'git@std.xxx.cn:Lib/SDKKit.git'
#  pod 'SDKKit/WithWeibo',	:git => 'git@std.xxx.cn:Lib/SDKKit.git'
#  pod 'SDKKit/WithQQ',		:git => 'git@std.xxx.cn:Lib/SDKKit.git'
#  pod 'SDKKit/WithAliPay',	:git => 'git@std.xxx.cn:Lib/SDKKit.git'

代码展示

盒子的实现.h

#import <Foundation/Foundation.h>
#import "RegisterServer.h"

/** 各个平台插件声明 */
@class QQServerImp, WXServerImp, ALServerImp, WBServerImp;

@interface FrameworkManager : NSObject

/**
*  获取对应平台的服务单例对象,根据对应平台的服务单例对象的具体实现,满足或部分满足以下一些需求行为
*  可执行:注册行为、登陆行为、分享行为、支付行为等..
*/
+ (id<RegisterServer>)frameworkServiceImp:(managerType)platformType;

@end

盒子的实现.m

/**
 *  根据Type获取对应的平台注册管理单例
 */
+ (id<RegisterServer>)frameworkImpPlatformType:(ManagerType)platformType{
    NSString *platformName = nil;
    switch (platformType) {
        case ManagerTypeQQ:
        {
        	# 是否集成了对应平台的判断
            if (FrameworkQQ) { 
                platformName = @"QQServerImp";
            }
        }
            break;
        case ManagerTypeWechat:
        {
            if (FrameworkWechat) {
                platformName = @"WXServerImp";
            }
        }
            break;
        case ManagerTypeAlipay:
        {
            if (FrameworkAlipay) {
                platformName = @"ALServerImp";
            }
        }
            break;
        case MMFrameworkManagerTypeWeibo:
        {
            if (MMFrameworkWeibo) {
                platformName = @"WBServerImp";
            }
        }
            break;
        case ManagerTypeNone:
        default:
            break;
    }
    if (platformName && [NSClassFromString(platformName) conformsToProtocol:@protocol(RegisterServer)]) {
        id <RegisterServer> objc = [NSClassFromString(platformName) sharedService];
        return objc;
    }
    return nil;
}

@end

举例子
1.注册协议

@protocol RegisterServer <NSObject>

@required

/**
 *  每个注册SDK自行管理其服务单例
 */
+ (instancetype)sharedService;

@optional

/**
 *  检测api
 */
- (BOOL)registerServerPlatformAppInstalled;

/**
 *  注册api
 * 	RegisterObject 是通用注册信息存储模型
 */
- (BOOL)registerServerToRegisterPlatform:(RegisterObject *)registerObject;

@end

总结建议

  1. 到这里基本一个由Protocol-Imp实现的盒子的设计基本思路已经完成,其他的需求行为还可以通过更多的协议来支持。
  2. 关于第三方的框架,如果是常用的框架,也建议多使用盒子封装多一层,后期的维护和升级方便很多,包括替换sdk的成本也降低了不少,日常开发里有如下但不局限于:网络请求库、提示信息库,异常信息上报库等等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值