关于iOS的社会化分享方案总结

简介:
本文讲的是 关于iOS的社会化分享方案总结, 一、系统原生 UIActivityViewController

优缺点

  • 优点:使用简单、不用注册繁杂的分享平台账号、不用导入臃肿的SDK包
  • 缺点:UI可定制性差,只能使用系统提供的固定样式,长相如下。分享的类型受限,只能分享text、url、image。 

UIActivityViewController分享界面

使用:

 
  1. NSString *textToShare = @"要分享的文本内容"
  2. UIImage *imageToShare = [UIImage imageNamed:@"iosshare.jpg"]; 
  3. NSURL *urlToShare = [NSURL URLWithString:@"http://www.baidu.com"]; 
  4.   
  5. NSArray *activityItems = @[textToShare, imageToShare, urlToShare]; 
  6. UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil]; 
  7.   
  8. [self presentViewController:activityVC animated:YES completion:nil];  

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

各平台分享概略

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

 
  1. activityVC.excludedActivityTypes = @[UIActivityTypePostToFacebook,UIActivityTypeAirDrop]; 

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

 
  1. UIActivityViewControllerCompletionWithItemsHandler myBlock = ^(UIActivityType __nullable activityType, BOOL completed, NSArray * __nullable returnedItems, NSError * __nullable activityError) { 
  2.          
  3.         if (completed){ 
  4.             NSLog(@"completed"); 
  5.         } 
  6.     }; 
  7.   
  8. activityVC.completionWithItemsHandler = myBlock; 

二、系统原生Social Framework

优缺点

  • 优点:使用简单、不用注册繁杂的分享平台账号、不用导入臃肿的SDK包。UI可以自己绘制,满足了很多个性化的需求。
  • 缺点:分享界面的UI需要开发者自己绘制,增加了工作量。分享的类型受限,只能分享text、url、image。

使用

导入Social.framework

 
  1. #import 
  2. //创建分享的控制器 
  3. SLComposeViewController *composeVc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo]; 
  4.   
  5. if (composeVc == nil){ 
  6.     NSLog(@"未安装软件"); 
  7.     return
  8.   
  9. if (![SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo]) { 
  10.     NSLog(@"软件未配置登录信息"); 
  11.     return
  12.   
  13. //添加分享的文字、图片、链接 
  14. [composeVc setInitialText:@"要分享的文本内容"]; 
  15. [composeVc addImage:[UIImage imageNamed:@"choice_highlight"]]; 
  16. [composeVc addURL:[NSURL URLWithString:@"http://www.baidu.com"]]; 
  17.   
  18. //弹出分享控制器 
  19. [self presentViewController:composeVc animated:YES completion:nil]; 
  20.   
  21. //监听用户点击了取消还是发送 
  22. composeVc.completionHandler = ^(SLComposeViewControllerResult result){ 
  23.     if (result == SLComposeViewControllerResultCancelled) { 
  24.         NSLog(@"点击了取消"); 
  25.     } else { 
  26.         NSLog(@"点击了发送"); 
  27.     } 
  28. };    

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

 
  1. SLServiceTypeTwitter; 
  2.  
  3. SLServiceTypeFacebook; 
  4.  
  5. SLServiceTypeSinaWeibo; 
  6.  
  7. SLServiceTypeTencentWeibo; 
  8.  
  9. SLServiceTypeLinkedIn; 

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

 
  1. NSString *socialType = @"com.tencent.xin.sharetimeline"
  2.  
  3. SLComposeViewController *composeVC = [SLComposeViewControllercomposeViewControllerForServiceType:socialType]; 

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

 
  1. SLComposeViewController *composeVc = [SLComposeViewControllercomposeViewControllerForServiceType:SLServiceTypeSinaWeibo]; 

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

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

优缺点

  • 优点:开发者可以按照第三方文档自己定制分享界面UI、功能。分享的类型可以自由选择,除了text、url、image。还有其他格式多媒体(声音、视频、文件等)可供选择。
  • 缺点:需要去友盟以及各个分享平台注册繁杂的账号、导入臃肿的SDK包。配置跳转白名单。

使用

友盟分享使用文档及SDK下载(http://dev.umeng.com/social/ios/operation)

四、OpenShare

优缺点

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

使用

  • 实现原理介绍

http://www.gfzj.us/series/openshare/

  • github代码和demo地址

https://github.com/100apps/openshare

总结

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

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

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

方案 UI 分享类型 分享平台
UIActivityViewController 要求不高 text、image、url 多种平台
Social Framework 要求自定义 text、image、url 多种平台
友盟等第三方分享平台 要求自定义 支持多媒体(声音、视频、文件等) 多种平台
OpenShare 要求自定义 支持多媒体(声音、视频、文件等 微信/QQ/微博/人人/支付宝

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

推荐

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

 
  1. IFMShareView *shareView = [[IFMShareView alloc] initWithItems:@[IFMPlatformNameSms,IFMPlatformNameEmail,IFMPlatformNameQQ,IFMPlatformNameWechat] itemSize:CGSizeMake(80,100) DisplayLine:YES]; 
  2. //设置分享内容 
  3. [shareView addText:@"分享测试"]; 
  4. [shareView addURL:[NSURL URLWithString:@"http://www.baidu.com"]]; 
  5. [shareView addImage:image]; 
  6.      
  7. [shareView showFromControlle:self]; 

部分自定义界面展示

图片展示

GIF展示

 

动图展示


本文作者:佚名

来源:51CTO

原文标题:关于iOS的社会化分享方案总结
相关文章
|
3月前
|
存储 数据建模 数据库
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
38 0
|
5月前
|
移动开发 安全 数据安全/隐私保护
ios安全加固 ios 加固方案
4.1字符串加密字符串会暴露APP的很多关键信息,攻击者可以根据界面显示的字符串,快速找到相关逻辑的处理函数,从而进行分析破解。加密字符串可以增加攻击者阅读代码的难度以及根据字符串静态搜索的难度。
|
27天前
|
移动开发 安全 数据安全/隐私保护
ios安全加固 ios 加固方案
ios安全加固 ios 加固方案
26 1
ios安全加固 ios 加固方案
|
27天前
|
安全 数据安全/隐私保护 虚拟化
iOS应用加固方案解析:ipa加固安全技术全面评测
iOS应用加固方案解析:ipa加固安全技术全面评测
36 3
|
3月前
|
移动开发 前端开发 数据安全/隐私保护
【教程】Ipa Guard为iOS应用提供免费加密混淆方案
【教程】Ipa Guard为iOS应用提供免费加密混淆方案
24 0
|
3月前
|
安全 数据安全/隐私保护 虚拟化
iOS应用加固方案解析:ipa加固安全技术全面评测
iOS应用加固方案解析:ipa加固安全技术全面评测
70 0
|
3月前
|
移动开发 安全 数据安全/隐私保护
ios安全加固 ios 加固方案
ios安全加固 ios 加固方案
39 0
|
4月前
|
移动开发 安全 数据安全/隐私保护
【教程】Ipa Guard为iOS应用提供免费加密混淆方案
概述:使用ios加固工具对ios代码保护,保护ios项目中的核心代码,
|
6月前
|
安全 Go 数据安全/隐私保护
免费升级到 iOS 17 Developer Beta:官方Apple Store升级方案与爱思助手方法比较
免费升级到 iOS 17 Developer Beta:官方Apple Store升级方案与爱思助手方法比较
218 0
|
9月前
|
存储 iOS开发
iOS主线程耗时检测方案
找出那个拖后腿的凶手
126 1
iOS主线程耗时检测方案