Social
现在很多应用都内置“社交分享”功能,可以将看到的新闻、博客、广告等内容分享到微博、微信、QQ、空间等,其实从iOS6.0开始苹果官方就内置了Social.framework专门来实现社交分享功能,利用这个框架开发者只需要几句代码就可以实现内容分享。下面就以一个分享到新浪微博的功能为例来演示Social框架的应用,整个过程分为:创建内容编辑控制器,设置分享内容(文本内容、图片、超链接等),设置发送(或取消)后的回调事件,展示控制器。
程序代码:
// // ViewController.m // Social // // Created by Kenshin Cui on 14/04/05. // Copyright (c) 2015年 cmjstudio. All rights reserved. // #import "ViewController.h" #import <Social/Social.h> @interface ViewController () @end @implementation ViewController #pragma mark - 控制器视图事件 - (void)viewDidLoad { [super viewDidLoad]; } #pragma mark - UI事件 - (IBAction)shareClick:(UIBarButtonItem *)sender { [self shareToSina]; } #pragma mark - 私有方法 -(void)shareToSina{ //检查新浪微博服务是否可用 if(![SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo]){ NSLog(@"新浪微博服务不可用."); return; } //初始化内容编写控制器,注意这里指定分享类型为新浪微博 SLComposeViewController *composeController=[SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo]; //设置默认信息 [composeController setInitialText:@"Kenshin Cui's Blog..."]; //添加图片 [composeController addImage:[UIImage imageNamed:@"stevenChow"]]; //添加连接 [composeController addURL:[NSURL URLWithString:@"http://www.cnblogs.com/kenshincui"]]; //设置发送完成后的回调事件 __block SLComposeViewController *composeControllerForBlock=composeController; composeController.completionHandler=^(SLComposeViewControllerResult result){ if (result==SLComposeViewControllerResultDone) { NSLog(@"开始发送..."); } [composeControllerForBlock dismissViewControllerAnimated:YES completion:nil]; }; //显示编辑视图 [self presentViewController:composeController animated:YES completion:nil]; } @end
运行效果:
发送成功之后:
在这个过程中开发人员不需要知道新浪微博的更多分享细节,Social框架中已经统一了分享的接口,你可以通过ServiceType设置是分享到Facebook、Twitter、新浪微博、腾讯微博,而不关心具体的细节实现。那么当运行上面的示例时它是怎么知道用哪个账户来发送微博呢?其实在iOS的设置中有专门设置Facebook、Twitter、微博的地方:
必须首先在这里设置微博账户才能完成上面的发送,不然Social框架也不可能知道具体使用哪个账户来发送。
第三方框架
当然,通过上面的设置界面应该可以看到,苹果官方默认支持的分享并不太多,特别是对于国内的应用只支持新浪微博和腾讯微博(事实上从iOS7苹果才考虑支持腾讯微博),那么如果要分享到微信、人人、开心等等国内较为知名的社交网络怎么办呢?目前最好的选择就是使用第三方框架,因为如果要自己实现各个应用的接口还是比较复杂的。当前使用较多的就是友盟社会化组件、ShareSDK,而且现在百度也出了社会化分享组件。今天无法对所有组件都进行一一介绍,这里就以友盟社交化组件为例简单做一下介绍:
- 注册友盟账号并新建应用获得AppKey。
- 下载友盟SDK并将下载的文件放到项目中(注意下载的过程中可以选择所需要的分享服务)。
- 在应用程序中设置友盟的AppKey。
- 分享时调用presentSnsIconSheetView: appKey: shareText: shareImage: shareToSnsNames: delegate:方法或者presentSnsController: appKey: shareText: shareImage: shareToSnsNames: delegate:方法显示分享列表(注意这个过程中要使用某些服务需要到对应的平台去申请并对应扩展框架进行设置,否则分享列表中不会显示对应的分享按钮)。
下面是一个简单的示例:
// // ViewController.m // Social_UM // // Created by Kenshin Cui on 14/04/05. // Copyright (c) 2015年 cmjstudio. All rights reserved. // #import "ViewController.h" #import "UMSocial.h" #import "UMSocialWechatHandler.h" @interface ViewController ()<UMSocialUIDelegate> @end @implementation ViewController #pragma mark - 控制器视图事件 - (void)viewDidLoad { [super viewDidLoad]; } #pragma mark - UI事件 - (IBAction)shareClick:(UIBarButtonItem *)sender { //设置微信AppId、appSecret,分享url // [UMSocialWechatHandler setWXAppId:@"wx30dbea5d5a258ed3" appSecret:@"cd36a9829e4b49a0dcac7b4162da5a5" url:@"http://www.cmj.com/social-UM"]; //微信好友、微信朋友圈、微信收藏、QQ空间、QQ好友、来往好友等都必须经过各自的平台集成否则不会出现在分享列表,例如上面是设置微信的AppId和appSecret [UMSocialSnsService presentSnsIconSheetView:self appKey:@"54aa0a0afd98c5209f000efa" shareText:@"Kenshin Cui's Blog..." shareImage:[UIImage imageNamed:@"stevenChow"] shareToSnsNames:@[UMShareToSina,UMShareToTencent,UMShareToRenren,UMShareToDouban] delegate:self]; } #pragma mark - UMSocialSnsService代理 //分享完成 -(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response{ //分享成功 if(response.responseCode==UMSResponseCodeSuccess){ NSLog(@"分享成功"); } } @end
运行效果: