自己写一个第三方分享库(一)

前言

最近想做分享时,总是遇到需要更新最新包的问题,并且还需要导入真机和模拟器二个包,非常麻烦,所以一直在思考如何自己做一个分享库,要想做第三方的分享库,首要问题是需要知道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-08-05 14:06:41

自己写一个第三方分享库(一)的相关文章

UIActivityViewController的相关用法(三)--自定义分享方式(比第三方分享库轻便)

使用UIActivityViewController自定义分享的方式, 以下代码创建一个UIActivityViewController,可以用AirDrop.邮件.QQ.微信分享,AirDrop分享是数据传输,其他三项是文本分享,可以在实现了UIActivityItemSource协议的item类中控制, // 创建UIActivityViewController,并呈现 -(void)createAndShowActivityViewController { // 构造自定义Activiti

ios第三方分享到qq、微信、人人网、微博总结

我们开发出来的APP通常要通过第三方分享到其他社交平台,如qq.微博微信 等.通过分享可以提高APP的传播效率,增加APP的曝光率,因此也算是APP功能 里的标配了吧.目前常用的第三方分享途径有qq.微信.微博.人人等.这些平台 大多都有自己的官方第三方分享组件可用,官方文档也比较丰富.使用起来比较方便. 这里我将已我的APP demo 两万番茄为例,展示如何实现这四个平台的第三方分享功 能. 虽然不同平台提供的模块和接口各异,但总体上,都有着相同的套路,搞通了一 套平台,其他的也就可以依样画葫

分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”

这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业不是百度来的,我只是百度了一些示例代码的意思,怎么用!算了,越解释万一越黑呢!哈哈O(∩_∩)O哈哈~) ----------------------------------------------------------------分界线------------------------------

分享一个日志处理库

分享自己写的一个日志处理库,如果你需要更重,可以进一步扩展,如果你需要更轻,只需要使用Logger类中的方法就可以了.之所以使用Timer+队列而不是使用ThreadPool来写入日志,主要是考虑到可以进行更大程度的控制.主要代码: Logger 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 5 using System.IO; 6 using System.Threading; 7 8 na

一个C++写的html解析库的简介

学习Qt也有段时间了,前一阵子想着写一个Qt版的博客园桌面端.现阶段主要想实现: (1)显示博客园主页的推荐的那个些文章的条目(包括作者的图像.该博客的浏览次数.发布时间等). (2)可以登陆自己的博客园账号,并显示自己的博客文章. (3)点击显示的博客文章条目时可以弹出窗口显示该片博客的内容. 同时还要实现自动刷新功能. 但是在编写的过程中,需要跟reply回来的html文档打交道,需要一个可以解析html文档的库.我在网上搜索了找到了C++编写的html解析库有htmlcxx.和google

我想写一个Linux下的C++程序库--记我的C++库设计历程:设计一个TCP服务程序

我想写一个Linux下的C++程序库,实现一些常用的功能. 我首先想到的就是实现一个TCP监听程序.该程序应该具有哪些功能呢? 1: 启动/停止监听 2: 有客户端连接时,通知调用者 3: 与客户端断开时,通知调用者 4: 有消息到达时,通知调用者 5: 尽量避免程序退出时有没有close的socket. 该程序的大体接口及结构主要用一个类表示,内容如下: #pragma once #include <functional> namespace Hi { /* * @ brief TCP监听会

不用任何第三方,写一个RTMP直播推流器

2016年是移动直播爆发年,不到半年的时间内无数移动直播App掀起了全民直播的热潮.然而个人觉得直播的门槛相对较高,从推流端到服务端器到播放端,无不需要专业的技术来支撑,仅仅推流端就有不少需要学习的知识.目前大部分直播采用的都是RTMP协议,我这里写一个简单的Demo,帮助大家更好的理解直播推流的过程,主要包括:音视频采集, 音视频编码, 数据打包, RTMP协议等相关的知识等.项目结构分的很清楚,各个模块也用协议进行了分离,方便大家学习不同的模块. 先阐述下推流的整体流程: 建立tcp连接 建

JAVA用标准库自己写一个字符串翻转方法,翻转字符串中字母非单词

例如输入:I love programming 输出:I evol gnimmargorp 算法思路就是:根据空格提取每一个单词,存放在一个buffer里进行翻转处理,再添加到新的字符串.最后新的字符串就完成整个方法过程. public class ReserveString { public String reserve(String sentence){ String backS = new String(); StringBuffer temp = new StringBuffer();

自己动手写一个iOS 网络请求库的三部曲[转]

代码示例:https://github.com/johnlui/Swift-On-iOS/blob/master/BuildYourHTTPRequestLibrary 开源项目:Pitaya,适合大文件上传的 HTTP 请求库:https://github.com/johnlui/Pitaya 本系列文章中,我们将尝试使用 NSURLSession 技术构建一个自己的网络请求库. NSURLSession 简介 NSURLSession 是 iOS7 引入的新网络请求接口,在 WWDC2013