前言
最近想做分享时,总是遇到需要更新最新包的问题,并且还需要导入真机和模拟器二个包,非常麻烦,所以一直在思考如何自己做一个分享库,要想做第三方的分享库,首要问题是需要知道App是如何跳转以及分享数据是如何传递,之前我想到是通过OpenURL中URL后面带参数去实现,后来想想URL长度传递是不可能允许这么多的数据传递,应该是通过App之间相互能访问的存储空间实现APP之间的数据传递,想想只有剪贴版了,实践证明我的猜想是对的,所以就把这次研究的步骤一步一步想下,与大家分享~
准备工作
本代码都是在真机上测试,模拟器不在此次考虑之内,为了简化,现在暂时以微信做介绍。
到微信官网下载Lib库,并按照微信官方指示搭建项目。
证明猜想
微信会话分享代码
- (void)weixinSession_share:(NSDictionary *)para {
WXMediaMessage *message = [WXMediaMessage message];
message.title = title;
message.description = description;
[message setThumbImage:[UIImage imageNamed:@"Icon-72"]];
WXWebpageObject *ext = [WXWebpageObject object];
ext.webpageUrl = webpageUrl;
message.mediaObject = ext;
message.mediaTagName = @"金蛋理财";
SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init];
req.bText = NO;
req.message = message;
req.scene = WXSceneSession;
[WXApi sendReq:req];
NSArray * pastboardTypes = [[UIPasteboard generalPasteboard] pasteboardTypes];
for (NSString * pastboardType in pastboardTypes) {
NSData * data = [[UIPasteboard generalPasteboard] valueForPasteboardType:pastboardType];
NSDictionary * dictionary = [NSPropertyListSerialization propertyListWithData:data options:NSPropertyListBinaryFormat_v1_0 format:0 error:nil];
debug(@"%@", dictionary);
}
}
打印出来的结果
{
wx72607e32ec65d0e1 = {
command = 1010;
description = "8%\U6d3b\U671f\U6536\U76ca\U7387\Uff0c\U4ec5\U5343\U5206\U4e4b\U4e00\U574f\U5e10\U7387\Uff0c2015\U5e74\U6700\U706b\U7206\U7684\U62a2\U94b1\U795e\U5668\Uff0c\U771f\U5fc3\U8dea\U4e86\Uff01";
mediaUrl = "http://www.jindanlicai.com/download/download.html";
objectType = 5;
result = 1;
returnFromApp = 0;
scene = 0;
sdkver = "1.5";
thumbData = <ffd8ffe0 .....>;(图片太长,这个就省略了)
title = "\U91d1\U86cb\U7406\U8d22\Uff0c\U8de8\U754c\U7406\U8d22\U795e\U5668";
};
}
从打印结果看,他的数据是存在UIPasteboard中,其中,wx72607e32ec65d0e1为我在微信平台申请的key值,description为分享描述,mediaUrl为分享链接,objectType为分享对象类型,scene为分享目的地,sdkver为版本号,thumbData为分享的缩略图,title为分享标题。
自己实现分享
既然我们已经知道了微信的数据保存在哪,并且知道他的数据格式是如何保存的,那么我们就可以自己写代码去实现微信分享了,我们新建一个项目SharedSDKDemo,然后在viewController中添加如下代码
- (NSString*)weixinShare {
NSMutableDictionary *dic=[[NSMutableDictionary alloc] initWithDictionary:@{
@"result" : @"1",
@"returnFromApp" : @"0",
@"scene" : [NSString stringWithFormat:@"%d",shareTo],
@"sdkver" : @"1.5",
@"command" : @"1020",
@"title" : @"我们来测试",
}];
NSData *output = [NSPropertyListSerialization dataWithPropertyList:@{@"wxd930ea5d5a258f4f":dic} format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil];
[[UIPasteboard generalPasteboard] setData:output forPasteboardType:@"content"];
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:[NSString stringWithFormat:@"weixin://app/%@/sendreq/?",@"wx72607e32ec65d0e1"]];
}
执行以上代码可以得到:
由此可看到如果我们自己想做一具分享SDK也是可以的~
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-13 08:23:10