您的位置:首页 > 其它

轻量级分享框架源码与扩展说明

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: