社交分享(一)系統自帶分享功能

前言:

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

    }];
}

實現效果:
這裏寫圖片描述
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章