iOS 社会化分享方案总结

2017 年 9 月 1 日 CocoaChina 檀羽冲

一、系统原生 UIActivityViewController


优缺点


  • 优点:使用简单、不用注册繁杂的分享平台账号、不用导入臃肿的SDK包


  • 缺点:UI可定制性差,只能使用系统提供的固定样式,长相如下。分享的类型受限,只能分享text、url、image。



UIActivityViewController分享界面


使用:


NSString *textToShare = @"要分享的文本内容"; 

UIImage *imageToShare = [UIImage imageNamed:@"iosshare.jpg"]; 

NSURL *urlToShare = [NSURL URLWithString:@"http://www.baidu.com"];


NSArray *activityItems = @[textToShare, imageToShare, urlToShare];

UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];


[self presentViewController:activityVC animated:YES completion:nil];


activityItems是要分享的内容,包括文字、图片、网址。但是要注意的是,不是所有平台都支持这三种内容的分享,例如微信,不能同时分享图片和网址,文字不能直接往外分享,下图是几个平台分享概略


各平台分享概略


当弹出视图框的时候,我们发现上边很多图标是我们用不到,我们可以将用不到的图标去掉,只要设置以下属性:


activityVC.excludedActivityTypes = @[UIActivityTypePostToFacebook,UIActivityTypeAirDrop];


设置回调block,可以在分享之后成功或失败后做事情,


 UIActivityViewControllerCompletionWithItemsHandler myBlock = ^(UIActivityType __nullable activityType, BOOL completed, NSArray * __nullable returnedItems, NSError * __nullable activityError) {

        

        if (completed){

            NSLog(@"completed");

        }

    };

activityVC.completionWithItemsHandler = myBlock;


二、系统原生Social Framework


优缺点


  • 优点:使用简单、不用注册繁杂的分享平台账号、不用导入臃肿的SDK包。UI可以自己绘制,满足了很多个性化的需求。


  • 缺点:分享界面的UI需要开发者自己绘制,增加了工作量。分享的类型受限,只能分享text、url、image。


使用


导入Social.framework


#import <Social/Social.h>


//创建分享的控制器

SLComposeViewController *composeVc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo];


if (composeVc == nil){

    NSLog(@"未安装软件");

    return;

}


if (![SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo]) {

    NSLog(@"软件未配置登录信息");

    return;

}


//添加分享的文字、图片、链接

[composeVc setInitialText:@"要分享的文本内容"];

[composeVc addImage:[UIImage imageNamed:@"choice_highlight"]];

[composeVc addURL:[NSURL URLWithString:@"http://www.baidu.com"]];


//弹出分享控制器

[self presentViewController:composeVc animated:YES completion:nil];


//监听用户点击了取消还是发送

composeVc.completionHandler = ^(SLComposeViewControllerResult result){

    if (result == SLComposeViewControllerResultCancelled) {

        NSLog(@"点击了取消");

    } else {

        NSLog(@"点击了发送");

    }

};   


系统只提供了下面几种分享平台:


SLServiceTypeTwitter;

SLServiceTypeFacebook;

SLServiceTypeSinaWeibo;

SLServiceTypeTencentWeibo;

SLServiceTypeLinkedIn;


实际可以根据id来分享到更多平台,如微信:


NSString *socialType = @"com.tencent.xin.sharetimeline";

SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType:socialType];


可以这么使用的原因是:iOS8之后系统推出的Share Extension,不是系统实现了微信分享,而是微信App的Share Extension提供了分享入口。所以这个不是私有API,可以放心使用,想获取手机中装的App的所有Share Extension的方法。只需调用下面一句代码。。


SLComposeViewController *composeVc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo];

看看控制台输出,手机内所有可用的Share Extension的bundle Id 都出来了。


三、友盟等第三方分享平台


优缺点


  • 优点:开发者可以按照第三方文档自己定制分享界面UI、功能。分享的类型可以自由选择,除了text、url、image。还有其他格式多媒体(声音、视频、文件等)可供选择。


  • 缺点:需要去友盟以及各个分享平台注册繁杂的账号、导入臃肿的SDK包。配置跳转白名单。


使用


友盟分享使用文档及SDK下载


四、OpenShare


优缺点


  • 优点:开发者可以自己定制分享界面UI、功能。分享的类型可以自由选择,除了text、url、image。还有其他格式多媒体(声音、视频、文件等)可供选择。


  • 缺点:需要配置跳转白名单。


使用


实现原理介绍

github代码和demo地址


总结


这四种分享方案,各有优缺点,没有最好的分享方案,只有最适合你App需求的方案。


如果你的App界面需要定制化,分享类型需要支持多媒体(声音、视频、文件等),分享平台只限于微信、QQ、微博、人人、支付宝,使用openshare。如果需要支持的平台很多,使用友盟分享。


如果分享的类型只限于text、image、url,对界面要求不高,系统原生的UIActivityViewController就可以,使用UIActivityViewController。如果界面需要定制化,使用Social Framework。



除了第一种方案UIActivityViewController不需要自己绘制界面以外,其他方案均要自己绘制分享弹出菜单,针对以上问题,我写了一个界面和功能高度可定制化的轮子IFMShareSwift版)供大家使用。


推荐


IFMShareSwift版)使用简单、优雅,界面和功能高度可定制化。支持单行滚动、双行滚动、多行、九宫格、头视图、尾视图等多种样式,分享功能可以一个平台名直接调用Share Extension,也可以使用各平台SDK或者OpenShare自定义分享功能。欢迎前去issue、pull request、star,代码示例如下:


 IFMShareView *shareView = [[IFMShareView alloc] initWithItems:@[IFMPlatformNameSms,IFMPlatformNameEmail,IFMPlatformNameQQ,IFMPlatformNameWechat] itemSize:CGSizeMake(80,100) DisplayLine:YES];

 

 //设置分享内容

[shareView addText:@"分享测试"];

[shareView addURL:[NSURL URLWithString:@"http://www.baidu.com"]];

[shareView addImage:image];

    

[shareView showFromControlle:self];


部分自定义界面展示


图片展示


GIF展示


动图展示


著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



一周
精选


iOS 强大的泛型

迟来的《Core NFC》

新码农和老码农(爆笑)

iOS Device ID 的前世今生

程序员之冷笑话,好笑不?

我们汇总了iPhone 8的传闻 最后发现它就是这样的

高效的多维空间点索引算法 — Geohash 和 Google S2


登录查看更多
0

相关内容

用户可以将网站的内容直接分享到其他社会化媒体上去。
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
专知会员服务
28+阅读 · 2020年5月20日
机器学习入门的经验与建议
专知会员服务
90+阅读 · 2019年10月10日
MIT新书《强化学习与最优控制》
专知会员服务
270+阅读 · 2019年10月9日
“马踏飞”AI机器人实现方案介绍
PaperWeekly
5+阅读 · 2019年8月31日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
硬核实践经验 - 企鹅辅导 RN 迁移及优化总结
IMWeb前端社区
5+阅读 · 2019年5月6日
从webview到flutter:详解iOS中的Web开发
前端之巅
5+阅读 · 2019年3月24日
你头疼的ELK难题,本文几乎都解决了
DBAplus社群
8+阅读 · 2019年3月20日
iOS自定义带动画效果的模态框
CocoaChina
7+阅读 · 2019年3月3日
这一次,彻底解决滚动穿透
IMWeb前端社区
34+阅读 · 2019年1月4日
设计和实现一款轻量级的爬虫框架
架构文摘
13+阅读 · 2018年1月17日
基于LDA的主题模型实践(三)
机器学习深度学习实战原创交流
23+阅读 · 2015年10月12日
Object Detection in 20 Years: A Survey
Arxiv
48+阅读 · 2019年5月13日
dynnode2vec: Scalable Dynamic Network Embedding
Arxiv
13+阅读 · 2018年12月6日
Arxiv
11+阅读 · 2018年4月8日
Arxiv
3+阅读 · 2018年3月13日
Arxiv
6+阅读 · 2018年2月7日
Arxiv
4+阅读 · 2016年12月29日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
专知会员服务
28+阅读 · 2020年5月20日
机器学习入门的经验与建议
专知会员服务
90+阅读 · 2019年10月10日
MIT新书《强化学习与最优控制》
专知会员服务
270+阅读 · 2019年10月9日
相关资讯
“马踏飞”AI机器人实现方案介绍
PaperWeekly
5+阅读 · 2019年8月31日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
硬核实践经验 - 企鹅辅导 RN 迁移及优化总结
IMWeb前端社区
5+阅读 · 2019年5月6日
从webview到flutter:详解iOS中的Web开发
前端之巅
5+阅读 · 2019年3月24日
你头疼的ELK难题,本文几乎都解决了
DBAplus社群
8+阅读 · 2019年3月20日
iOS自定义带动画效果的模态框
CocoaChina
7+阅读 · 2019年3月3日
这一次,彻底解决滚动穿透
IMWeb前端社区
34+阅读 · 2019年1月4日
设计和实现一款轻量级的爬虫框架
架构文摘
13+阅读 · 2018年1月17日
基于LDA的主题模型实践(三)
机器学习深度学习实战原创交流
23+阅读 · 2015年10月12日
相关论文
Object Detection in 20 Years: A Survey
Arxiv
48+阅读 · 2019年5月13日
dynnode2vec: Scalable Dynamic Network Embedding
Arxiv
13+阅读 · 2018年12月6日
Arxiv
11+阅读 · 2018年4月8日
Arxiv
3+阅读 · 2018年3月13日
Arxiv
6+阅读 · 2018年2月7日
Arxiv
4+阅读 · 2016年12月29日
Top
微信扫码咨询专知VIP会员