前言:
很多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");
}
}];
}
實現效果: