最近又开始弄分享这块,特此将遇到的问题总结下,避免下次踩坑。
一般说来,目前我们分享我们主要采取下面三种方式:
- 系统自带的分享
UIActivityViewController & SLComposeViewController - 完全自定义,自己去找其SDK
- 第三方分享(友盟,ShareSDK)
下面稍微以系统自带的和第三方分享稍微记录下。
一、UIActivityViewController
采用 UIActivityViewController 的优缺点特别明显:
-
优点:
代码量少,而且是用系统的保障度高,UI 格式也是原生的贴切。 -
缺点
- UI 虽说是原生的,但也是死的,灵活度不够
- 不支持网页的,必须强制用户先去 设置中绑定账号,简单的说流程不够直接。
使用代码确实很简单如下,有什么直接看 API 就OK啦
UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:@[[NSURL URLWithString:urlString]] applicationActivities:nil];
activityVC.excludedActivityTypes = @[UIActivityTypeAirDrop];
[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:activityVC animated:YES completion:nil];
activityVC.completionWithItemsHandler = ^(UIActivityType __nullable activityType, BOOL completed, NSArray * __nullable returnedItems, NSError * __nullable activityError) {
if (completed) {
NSLog(@"Share Success");
}
else {
NSLog(@"Share Failed == %@",activityError.description);
}
};
二、完全自定义,使用各个平台官方的SDK
这种情况也可能有,具体看自己需求吧,例如找 一个 FaceBook 官方提供库,里面提供的文件就一大堆,然后各种 API 使用,如果需要分享的平台比较多,那就更多了。
FaceBookShare
优缺点那是是明显:
- 优点: 完全自定义,UI界面,点击事件等处理相当自如。
- 缺点: 麻烦,导入东西太多,增加 App 体积。
三 、第三方分享(Share SDK)
之前有总结过类似的问题 Share SDK 使用遇到的几个问题, 但是总的来说 还是一个看文档的过程,这次我使用的时候还是遇到两个问题,特此也记录下:
- 3-1、需要直接分享,不需要走ShareSDK 中间那步骤。
- 3-2、需要自定义 分享处的界面需要加标题。
3-1、对于这个问题是:由于使用的官方推荐的方法导致的而导致的,之前是
/**
* 显示分享菜单
*
* @param view 要显示菜单的视图, iPad版中此参数作为弹出菜单的参照视图
* @param items 菜单项,如果传入nil,则显示已集成的平台列表
* @param shareParams 分享内容参数
* @param shareStateChangedHandler 分享状态变更事件
*
* @return 分享菜单控制器
*/
+ (SSUIShareActionSheetController *)showShareActionSheet:(UIView *)view
items:(NSArray *)items
shareParams:(NSMutableDictionary *)shareParams
onShareStateChanged:(SSUIShareStateChangedHandler)shareStateChangedHandler;
/**
* 显示内容编辑视图
*
* @param platformType 分享的平台类型
* @param otherPlatformTypes 除分享平台外,还可以分享的平台类型。
* @param shareParams 分享内容参数
* @param shareStateChangedHandler 分享状态变更事件
*
* @return 内容编辑视图控制器
*/
+ (SSUIShareContentEditorViewController *)showShareEditor:(SSDKPlatformType)platformType
otherPlatformTypes:(NSArray *)otherPlatformTypes
shareParams:(NSMutableDictionary *)shareParams
onShareStateChanged:(SSUIShareStateChangedHandler)shareStateChangedHandler;
通常使用第一种方法的时候,顺便会把第二种方法中的页面也会展示出来,此时我们感觉第二种方法
就是前面一步省略掉解决方法,换一种方法就好了,直接采用 下面这个方法就好啦
/**
* 分享内容
*
* @param platformType 平台类型
* @param parameters 分享参数
* @param stateChangeHandler 状态变更回调处理
*/
+ (void)share:(SSDKPlatformType)platformType
parameters:(NSMutableDictionary *)parameters
onStateChanged:(SSDKShareStateChangedHandler)stateChangedHandler;
或者注意到这个方法:
/**
* 支持点击分享菜单栏平台后直接分享的平台(不显示分享编辑页面),默认支持微信和QQ平台。
*/
@property (nonatomic, strong) NSMutableSet *directSharePlatforms;
3-2、对于这个问题,就是相当于在 ShareSDK 的基础上自定义,实际上就是实现 Button 布局,然后利用 【分享内容】的 事件 任意制定我们想要展示的界面。但实际上个人认为,ShareSDK 上面提供的几种自定义界面已经OK了,没必要如此做的。
综上所述,选择哪一种方式还是看自己项目中的需求吧!
UIActivityViewController最简单;第三方最实在,看应用场景咯。
网友评论