轻量级分享框架源码与扩展说明
2015-12-25 17:46
176 查看
介绍
最近花了一点时间写了一个轻量级的分享框架ThinShareSDK,源码放在github上。本篇主要介绍一下整体的设计以及使用者怎么在原有的基础上简单的扩展。
接口说明
分享主要分两个步骤1. 构建模型
2. 生成分享界面并分享
id model = [OKWShareSDK webContentTitle:@"分享链接" description:@"测试分享" webpageUrl:@"www.baidu.com" thumbImageData:data]; //构建Model [OKWShareSDK defaultShareMenu:@"title" model:model];
默认一共有7种分享,
QQ好友,
QQ空间,
微信好友,
朋友圈,
微信收藏,
短信,
邮件。这些是可选的。
id model = [OKWShareSDK webContentTitle:@"分享链接" description:@"测试分享" webpageUrl:@"www.baidu.com" thumbImageData:data]; //构建Model NSArray *typeArray = [OKWShareSDK getShareListType:OKWShareTypeQQ,OKWShareTypeWeChatFav,OKWShareTypeSMS ,nil]; //构建分享类型 [OKWShareSDK defaultOptionShareMenu:@"title" model:model types:typeArray];
我会根据构建
Model的种类与分享的类型来判断把哪种类型的信息分享到哪里。
如果想要定制界面而不用默认的界面也分两个步骤
1. 构建模型
2. 调用分享接口
id model = [OKWShareSDK webContentTitle:@"分享链接" description:@"测试分享" webpageUrl:@"www.baidu.com" thumbImageData:data]; //构建Model [OKWShareSDK share:OKWShareTypeWeChatSession model:model]; //分享到微信好友
提供分享功能,界面自由定制,然后直接调用提供的方法即可。
关于分享后回调,在静态库中统一回调给
OKWShareDelegate这个类,所有的回调操作统一在这里处理。
分享基类
静态库中有一个OKWBaseShare的类,这是分享的基类,所有种类的分享功能类都继承此类,
OKWBaseShare提供基础分享接口,分享统一调用
OKWBaseShare提供的接口,然后根据多态的特性,由
OKWBaseShare决定到底哪一个子类来执行此功能。
@interface OKWBaseShare : NSObject /** * 发送链接消息 * * @param content 内容 * @param type 分享到哪里 */ +(void)sendLinkMessage:(OKWShareContent *)content messageType:(OKWShareType)type; /** * 发送文本消息 * * @param content 内容 * @param type 分享到哪里 */ +(void)sendTextMessage:(OKWShareContent *)content messageType:(OKWShareType)type; @end
分享数据模型
分享的数据统一由OKWShareContent类管理,构建数据模型时生成的Model就是
OKWShareContent类型,
OKWShareContent里有一个
OKWShareDataType枚举类型成员变量,当构建模型时用
OKWShareDataType来区别应该构建哪种类型数据。
typedef NS_ENUM(NSUInteger,OKWShareDataType) { OKWShareWabURL, OKWShareText }; @interface OKWShareContent : NSObject @property (nonatomic,copy) NSString *title; //标题 @property (nonatomic,copy) NSString *description; //描述信息 @property (nonatomic,copy) NSString *webpageUrl; //wap链接 @property (nonatomic,copy) NSData *thumbImageData; //缩略图数据 @property (nonatomic) NSString *text; //文本信息 @property (nonatomic) OKWShareDataType dataType; //内容类型 @end
扩展
扩展分享数据类型
默认只有分享链接与文本,如果想分享一个图片信息就需要在原有的基础上进行扩展1. 在
OKWShareSDK中提供一个构建图片数据模型的方法
参考
/** * 创建分享web的内容 * * @param title 分享的链接 * @param description 分享的描述 * @param pageUrl 分享的URL * @param thumbImageData 分享的缩略图 * * @return 分享的数据模型 */ +(id)webContentTitle:(NSString *)title description:(NSString *)description webpageUrl:(NSString *)pageUrl thumbImageData:(NSData *)thumbImageData; /** * 创建分享文本内容 * * @param content 分享的内容 * * @return 分享的数据模型 */ +(id)textContent:(NSString *)content;
2.在
OKWBaseShare中提供发送图片信息的接口然后在其子类中实现该方法
参考
/** * 发送链接消息 * * @param content 内容 * @param type 分享到哪里 */ +(void)sendLinkMessage:(OKWShareContent *)content messageType:(OKWShareType)type; /** * 发送文本消息 * * @param content 内容 * @param type 分享到哪里 */ +(void)sendTextMessage:(OKWShareContent *)content messageType:(OKWShareType)type;
3.在
OKWShareContent添加数据类型的种类,并且在构建数据模型时给
dataType进行赋值
参考
typedef NS_ENUM(NSUInteger,OKWShareDataType) { OKWShareWabURL, OKWShareText };
+(id)webContentTitle:(NSString *)title description:(NSString *)description webpageUrl:(NSString *)pageUrl thumbImageData:(NSData *)thumbImageData { OKWShareContent *shareContent = [OKWShareContent new]; shareContent.title = title; shareContent.description = description; shareContent.webpageUrl = pageUrl; shareContent.thumbImageData = thumbImageData; shareContent.dataType = OKWShareWabURL; return shareContent; } +(id)textContent:(NSString *)content { OKWShareContent *shareContent = [OKWShareContent new]; shareContent.text = content; shareContent.dataType = OKWShareText; return shareContent; }
4.在
OKWShareSDK实现文件中实现分享的方法
参考
+(void)share:(OKWShareType)type model:(id)model { OKWShareContent *shareModel = model; switch (shareModel.dataType) { case OKWShareWabURL: [OKWShareSDK shareLink:type model:model]; break; case OKWShareText: [OKWShareSDK shareLText:type model:model]; break; default: break; } } +(void)shareLink:(OKWShareType)type model:(id)model { [OKWBaseShare sendLinkMessage:model messageType:type]; } +(void)shareLText:(OKWShareType)type model:(id)model { [OKWBaseShare sendTextMessage:model messageType:type]; }
5.这样原有的分享就可以根据构建的数据模型的类型来进行图片分享。
扩展分享种类
默认有七种分享如果想添加一种分享就要扩展分享种类1.在
OKWShareSDK实现文件中有一个
NSDictional的类别。在里面添加需要扩展的名称和图片的名称。将图片资源放在
OKWShareResource.bundle中。
参考
@implementation NSDictionary (defaultShareData) +(id)defaultShareData; { NSMutableDictionary *shareData = [NSMutableDictionary new]; NSDictionary *weChatSession = @{@"image":@"OKWShareResource.bundle/wechat_friends",@"title":@"微信好友"}; [shareData addEntriesFromDictionary:@{[NSNumber numberWithUnsignedInteger:OKWShareTypeWeChatSession]:weChatSession}]; NSDictionary *weChatTimeLine = @{@"image":@"OKWShareResource.bundle/wechant_timeline",@"title":@"朋友圈"}; [shareData addEntriesFromDictionary:@{[NSNumber numberWithUnsignedInteger:OKWShareTypeWeChatTimeLine]:weChatTimeLine}]; NSDictionary *weChatFav = @{@"image":@"OKWShareResource.bundle/wechat_fav",@"title":@"微信收藏"}; [shareData addEntriesFromDictionary:@{[NSNumber numberWithUnsignedInteger:OKWShareTypeWeChatFav]:weChatFav}]; NSDictionary *QQ = @{@"image":@"OKWShareResource.bundle/qq_friends",@"title":@"QQ好友"}; [shareData addEntriesFromDictionary:@{[NSNumber numberWithUnsignedInteger:OKWShareTypeQQ]:QQ}]; NSDictionary *QQSpace = @{@"image":@"OKWShareResource.bundle/qq_space",@"title":@"QQ空间"}; [shareData addEntriesFromDictionary:@{[NSNumber numberWithUnsignedInteger:OKWShareTypeQQSpace]:QQSpace}]; NSDictionary *mail = @{@"image":@"OKWShareResource.bundle/mail",@"title":@"邮件"}; [shareData addEntriesFromDictionary:@{[NSNumber numberWithUnsignedInteger:OKWShareTypeMail]:mail}]; NSDictionary *SMS = @{@"image":@"OKWShareResource.bundle/message",@"title":@"短信"}; [shareData addEntriesFromDictionary:@{[NSNumber numberWithUnsignedInteger:OKWShareTypeSMS]:SMS}]; return shareData; } @end
2.在
OKWShareSDK中添加分享种类的枚举值
参考
typedef NS_ENUM(NSUInteger,OKWShareType) { OKWShareTypeWeChatSession = 1000, //微信好友 OKWShareTypeWeChatTimeLine, //微信朋友圈 OKWShareTypeWeChatFav, //微信收藏 OKWShareTypeQQ, //QQ OKWShareTypeQQSpace, //QQ空间 OKWShareTypeMail, //邮件 OKWShareTypeSMS //短信 };
3.创建要分享功能的类,继承
OKWBaseShare,并实现要
OKWBaseShare的方法。具体请参考
OKWWeChatShare与
OKWQQShare类方法的实现。
4.在
OKWBaseShare实现文件中添加新增分享种类的判断。
参考
+(void)sendTextMessage:(OKWShareContent *)content messageType:(OKWShareType)type { switch (type) { case OKWShareTypeWeChatFav: case OKWShareTypeWeChatTimeLine: case OKWShareTypeWeChatSession: [OKWWeChatShare sendTextMessage:content messageType:type]; break; case OKWShareTypeMail: case OKWShareTypeSMS: [OKWSystemShare sendTextMessage:content messageType:type]; break; case OKWShareTypeQQ: case OKWShareTypeQQSpace: [OKWQQShare sendTextMessage:content messageType:type]; break; default: break; } }
相关文章推荐
- iOS退出程序的代码
- iOS屏幕(UIViewController)旋转的横竖屏
- Linux进程实践(4) --wait避免僵尸进程
- Jquery鼠标点击后变色,点击另一个按钮颜色还原
- NSString 的常用操作
- 【翻译】LPeg编程指南
- C Primer Plus之文件输入/输出
- DDBS
- RecyclerView-FlexibleDivider—RecyclerView分割线的Android类库
- Apache Thrift的简单使用
- Go 语言条件语句
- zabbix_server [9093]启动报错
- v8 resource
- ios 微信登录
- openfire3.10.2安装部署及集群配置及openfire优化
- ubuntu 第一个Hello world模块编译(本机运行)
- Linux进程实践(3) --进程终止与exec函数族
- REDIS 配置说明
- AndroidStudio怎样导入jar包
- 集算器协助java处理多样性数据源之MongoDB