现在很多应用都内置“社交分享”功能,可以将看到的新闻、博客、广告等内容分享到微博、微信、QQ、空间等,其实从iOS6.0开始苹果官方就内置了Social.framework专门来实现社交分享功能,利用这个框架开发者只需要几句代码就可以实现内容分享。下面就以一个分享到新浪微博的功能为例来演示Social框架的应用,整个过程分为:创建内容编辑控制器,设置分享内容(文本内容、图片、超链接等),设置发送(或取消)后的回调事件,展示控制器。
程序代码:
1 // 2 // ViewController.m 3 // Social 4 // 5 // Created by HO on 16/3/28. 6 // Copyright © 2016年 HO. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 #import <Social/Social.h> 11 12 @interface ViewController () 13 14 @end 15 16 @implementation ViewController 17 18 #pragma mark - UI事件 19 - (IBAction)shareClick:(id)sender { 20 [self shareTosina]; 21 } 22 23 #pragma mark 私有方法 24 - (void)shareTosina{ 25 //检查新浪微博服务是否可用 26 if (![SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo]) { 27 NSLog(@"新浪微博服务不可用."); 28 return; 29 } 30 //初始化内容编写控制器,注意这里指定分享类型为微博 31 SLComposeViewController * composeController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo]; 32 //设置默认信息 33 [composeController setInitialText:@"标题:iOS Social框架 新浪微博分享测试 内容:顺手给我new一个对象技术博客"]; 34 //添加图片 35 [composeController addImage:[UIImage imageNamed:@"1.png"]]; 36 //添加链接 37 [composeController addURL:[NSURL URLWithString:@"http://www.cnblogs.com/HOYF/"]]; 38 //设置发送完成后的回调事件 39 __block SLComposeViewController * composeControllerForBlock = composeController; 40 composeController.completionHandler = ^(SLComposeViewControllerResult result){ 41 if (result == SLComposeViewControllerResultDone) { 42 NSLog(@"开始发送..."); 43 } 44 [composeControllerForBlock dismissViewControllerAnimated:YES completion:nil]; 45 }; 46 //显示编辑视图 47 [self presentViewController:composeController animated:YES completion:nil]; 48 } 49 50 51 52 - (void)viewDidLoad { 53 [super viewDidLoad]; 54 // Do any additional setup after loading the view, typically from a nib. 55 } 56 57 - (void)didReceiveMemoryWarning { 58 [super didReceiveMemoryWarning]; 59 // Dispose of any resources that can be recreated. 60 } 61 62 @end
运行效果:
发送成功后:
在这个过程中开发人员不需要知道新浪微博的更多分享细节,Social框架中已经统一了分享的接口,你可以通过ServiceType设置是分享到Facebook、Twitter、新浪微博、腾讯微博,而不关心具体的细节实现。那么当运行上面的示例时它是怎么知道用哪个账户来发送微博呢?其实在iOS的设置中有专门设置Facebook、Twitter、微博的地方:
必须首先在这里设置微博账户才能完成上面的发送,不然Social框架也不可能知道具体使用哪个账户来发送。