当前位置: 首页 > 科技观察

iOS社交分享解决方案总结

时间:2023-03-20 22:49:30 科技观察

一、系统原生UIActivityViewController优缺点优点:简单易用,无需注册复杂的分享平台账号,无需导入臃肿的SDK包缺点:UI可定制性差,只能使用系统提供的固定样式是这样的。分享类型有限,只能分享文字、网址、图片。UIActivityViewController分享接口使用:NSString*textToShare=@"要分享的文字内容";UIImage*imageToShare=[UIImageimageNamed:@"iosshare.jpg"];NSURL*urlToShare=[NSURURLWithString:@"http://www.baidu.com"];NSArray*activityItems=@[textToShare,imageToShare,urlToShare];UIActivityViewController*activityVC=[[UIActivityViewControlleralloc]initWithActivityItems:activityItemsapplicationActivities:nil];[selfpresentViewController:activityVCanimated:YEScompletion:nil];是要分享的内容,包括activityItems文字、图片、网址。不过需要注意的是,并不是所有的平台都支持这三类内容的分享。比如微信不能同时分享图片和网址,也不能直接分享文字。当我们发现上面的很多图标不被我们使用时,我们可以通过设置如下属性来移除不用的图标:activityVC.excludedActivityTypes=@[UIActivityTypePostToFacebook,UIActivityTypeAirDrop];设置回调块,可以是分享成功后,也可以是分享失败后做事,UIActivityViewControllerCompletionWithItemsHandlermyBlock=^(UIActivityType__nullableactivityType,BOOLcompleted,NSArray*__nullablereturnedItems,NSError*__nullableactivityError){if(completed){NSLog(@"completed");}};ocialityVC.completionWithItemsHandler=myBlock优缺点优点:简单易用,无需注册复杂的分享平台账号,无需导入臃肿的SDK包。UI可以自己绘制,满足很多个性化需求。缺点:分享界面的UI需要开发者自己绘制,增加了工作量。分享类型有限,只能分享文字、网址、图片。使用importSocial.framework#import//创建共享控制器SLComposeViewController*composeVc=[SLComposeViewControllercomposeViewControllerForServiceType:SLServiceTypeSinaWeibo];if(composeVc==nil){NSLog(@"未安装软件");return;}if(![SLComposeViewControllerisAvailableForServiceType:SLServiceTypeSinaWeibo]){NSLog(@"软件未配置登录信息");return;}//添加分享的文字、图片、链接[composeVcsetInitialText:@"要分享的文字内容"];[composeVcaddImage:[UIImageimageNamed:@"choice_highlight"]];[composeVcaddURL:[NSURURRLWithString:@"http://www.baidu.com"]];//弹窗分享控制器[selfpresentViewController:composeVcanimated:YEScompletion:nil];//监听用户点击cancel或者发送composeVc.completionHandler=^(SLComposeViewControllerResultresult){if(result==SLComposeViewControllerResultCancelled){NSLog(@"clickedtocancel");}else{NSLog(@"clickedtosend");}};系统只提供下面几个共享平台:SLServiceTypeTwi叔;SL服务类型Facebook;SLServiceType新浪微博;SL服务类型腾讯微博;SL服务类型领英;其实可以根据id分享到更多平台,比如微信:NSString*socialType=@"com.tencent.xin.sharetimeline";SLComposeViewController*composeVC=[SLComposeViewControllercomposeViewControllerForServiceType:socialType];之所以可以这样使用是因为:iOS8之后系统推出的ShareExtension并不是实现微信分享的系统,而是WeChatAppShareExtension提供了一个分享入口,所以这不是私有API,你可以放心使用,想获取手机安装的App的所有ShareExtension方法。只需调用以下代码行。SLComposeViewController*composeVc=[SLComposeViewControllercomposeViewControllerForServiceType:SLServiceType新浪微博];查看控制台输出,手机中所有可用的ShareExtensions的bundleId都出来了。3、友盟等第三方分享平台优缺点优势:开发者可以根据第三方文档自定义分享界面UI和功能。分享的类型可以自由选择,除了文字、网址和图片。还有其他格式的多媒体(声音、视频、文件等)可供选择。缺点:需要去友盟和各种分享平台注册复杂的账号,导入臃肿的SDK包。配置跳转白名单。使用友盟分享使用文档和SDK下载(http://dev.umeng.com/social/ios/operation)4.OpenShare优缺点优点:开发者可以自行定制分享界面UI和功能。分享的类型可以自由选择,除了文字、网址和图片。还有其他格式的多媒体(声音、视频、文件等)可供选择。缺点:需要配置跳转白名单。使用原理和实现介绍http://www.gfzj.us/series/openshare/github代码和demo地址https://github.com/100apps/openshare总结了这四种分享方案,各有优缺点缺点,没有***,只有最适合您App需求的分享解决方案。如果您的App界面需要定制,分享类型需要支持多媒体(声音、视频、文件等),分享平台仅限微信、QQ、微博、人人网、支付宝,使用openshare。如果需要支持多平台,使用友盟分享。如果分享的类型仅限于文本、图片、url,对界面要求不高,可以使用系统原生的UIActivityViewController,使用UIActivityViewController即可。如果需要自定义界面,请使用SocialFramework。SchemeUI分享类型分享平台UIActivityViewController不要求高文字、图片、url多平台SocialFramework需要自定义文字、图片、url多平台友盟等第三方分享平台需要自定义支持多媒体(声音、视频、文件等)。)多平台OpenShare需要自定义支持多媒体(声音,视频,文件等微信/QQ/微博/人人网/支付宝除了第一个方案UIActivityViewController不需要自己绘制界面,其他方案必须绘制分享pop-自己上菜单,针对以上问题,写了一个高度可定制的界面和功能的轮子IFMShare(Swift版)供大家使用。推荐IFMShare(Swift版)使用简单优雅,界面和功能是高度可定制的。支持单行滚动、双行滚动、多行、九宫格、头视图、尾视图等多种样式。分享功能可以直接用平台名调用ShareExtension,也可以使用各平台SDK或OpenShare自定义分享功能。欢迎issue、pullrequest和star。代码示例如下:IFMShareView*shareView=[[IFMShareViewalloc]initWithItems:@[IFMPlatformNameSms,IFMPlatformNameEmail,IFMPlatformNameQQ,IFMPlatformNameWechat]itemSize:CGSizeMake(80,100)DisplayLine:YES];//设置分享内容[shareViewaddText:@》分享测试"];[shareViewaddURL:[NSURURRLWithString:@"http://www.baidu.com"]];[shareViewaddImage:image];[shareViewshowFromControlle:self];部分自定义界面显示图片显示GIF显示动画显示参考文章:《使用系统自带的UIActivityViewController和UIActivity进行内容分享》新手指南:使用SocialFramework和UIActivityViewControlleriOS在程序中通过UIActivityViewController实现原生分享功能UIActivityViewController和SLComposeViewController分享到微信