社交分享(一)系统自带分享功能

前言:

很多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(@"分享成功");
        }
    }];
}

实现效果:
社交分享(一)系统自带分享功能_第1张图片

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");
        }

    }];
}

实现效果:
社交分享(一)系统自带分享功能_第2张图片
社交分享(一)系统自带分享功能_第3张图片

你可能感兴趣的:(社交分享)