前言:
很多APP中都带有社交分享功能,国内较或的分享平台有微信,IOS6后苹果集成的新浪微博,还有IOS7后集成的腾讯微博。 在IOS中,实现社交分享可以自己编写各个平台的分享代码,但代码量较多,也可以利用iOS自带的Social.framework,更可以利用第三方的分享框架,如友盟,ShareSDK等。
本文主要介绍一下系统自带的分享服务框架。 iOS系统为我们提供了两个不同的类来实现分享服务。
- SLComposeViewController 提供撰写社交信息(如微博信息)的视图控制器,有iOS系统提供UI,就是写入要分享内容的小弹出框。属于Social.framework框架。
- UIActivityViewControlelr 是iOS6的新的内容,它提供了一个分享列表视图控制器。属于UIKit.framework框架。
1. 分享视图控制器:SLComposeViewController
SLComposeViewController的呈现在iPhone采用模态视图,iPad则需要Popover视图呈现。如果发送微博信息并不像弹出分享列表,再去选择,而是在应用中直接进入写评论的地方(iOS系统提供的UI画面)。SLComposeViewController类可以帮助我们实现这个目的,SLComposeViewControlelr不仅可以撰写weibo,还可以撰写Tweet和Facebook。发送这样的社交网络信息一般会包含3中信息:初始文本、图片和超链接,因此SLComposeViewController类设计3个相对方法:
- setInitialText:(NSString *)text,设置初始文本内容
- addImage:(UIImage *)iamge,添加图片
addURL:(NSURL *)url,添加超链接信息
使用SLComposeViewController来实现社交分享的具体步骤如下: 1. 判断设备是否可以向指定的分享平台分享。 2. 创建分享视图控制器,指定分享平台 3. 设置分享内容。 4. 进入分享界面。 5. 监听用户操作。
示例代码:
- (IBAction)social:(id)sender {
// 1. 判断设备是否支持指定的分享平台
// SLComposeViewController:社交分享的视图控制器
BOOL isAvailable = [SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo];
if (isAvailable == NO) {
NSLog(@"应用不支持新浪微博分享");
return;
}
// 2. 创建分享视图控制器,并指定分享平台
SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo];
/* 系统支持的分享功能可以分享的平台
SOCIAL_EXTERN NSString *const SLServiceTypeTwitter
SOCIAL_EXTERN NSString *const SLServiceTypeFacebook
SOCIAL_EXTERN NSString *const SLServiceTypeSinaWeibo
SOCIAL_EXTERN NSString *const SLServiceTypeTencentWeibo
SOCIAL_EXTERN NSString *const SLServiceTypeLinkedIn
*/
// 3. 设置分享内容
[composeVC setInitialText:@"系统自带的社交分享服务"];
[composeVC addImage:[UIImage imageNamed:@"1.jpg"]];
[composeVC addURL:[NSURL URLWithString:@"https://www.baidu.com"]];
// 4. 进入分享界面
[self presentViewController:composeVC animated:YES completion:^{
NSLog(@"进入分享界面");
}];
// 5. 监听用户操作
[composeVC setCompletionHandler:^(SLComposeViewControllerResult result) {
if (result == SLComposeViewControllerResultCancelled) {
NSLog(@"取消分享");
}else if (result == SLComposeViewControllerResultDone) {
NSLog(@"分享成功");
}
}];
}
实现效果:
2. 分享列表:UIActivityViewController
在iOS6之后系统为我们提供了一个分享列表视图,它通过UIActivityViewController管理。苹果设计它的主要目的是替换分享动作,分享动作选单是出于分享目的的动作选单。内置活动列表项主要有一下几个:
- UIActivityTypePostToFacebook,Facebook活动列表项;
- UIActivityTypePostToTwitter,Twitter活动列表项;
- UIActivityTypePostToWeibo,新浪微博活动列表项;
- UIActivityTypeMessage,iOS中的iMessage应用活动那个列表项;
- UIActivityTypeMail,发送Mail活动列表项;
- UIActivityTypePrint,共享打印活动列表项;
- UIActivityTypeCopyToPasteboard,复制到剪切板活动列表项;
- UIActivityTypeAssignToContact,访问联系人活动列表项;
UIActivityTypeSaveToCameraRoll,访问设备上的相册活动列表项;
使用UIActivityViewController我们可以选中需要分享的平台,然后跳转到分享内容的边界界面,具体的实现步骤如下: 1. 设置分享内容。 2. 创建分享列表的控制器,并传入分享内容 3. 推出分享视图控制器。
示例代码:
- (IBAction)activity:(id)sender {
// 设置分享内容
NSString *text = @"分享内容";
UIImage *image = [UIImage imageNamed:@"1.jpg"];
NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
NSArray *activityItems = @[text, image, url];
// 服务类型控制器
UIActivityViewController *activityViewController =
[[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
[self presentViewController:activityViewController animated:YES completion:nil];
// 选中分享类型
[activityViewController setCompletionWithItemsHandler:^(NSString * __nullable activityType, BOOL completed, NSArray * __nullable returnedItems, NSError * __nullable activityError){
// 显示选中的分享类型
NSLog(@"act type %@",activityType);
if (completed) {
NSLog(@"ok");
}else {
NSLog(@"no ok");
}
}];
}
实现效果: