iOS分享到第三方应用方法整理

分享到Facebook

在iOS应用内将内容分享到Facebook,可通过接入Facebook SDK实现。官方网站:https://developers.facebook.com/docs/sharing/ios
接入Facebook SDK这里不做介绍。
可分享的内容为链接、图片、视频、多媒体(图片+视频),还可为分享的视频添加话题。
每一种分享内容都有对应的shareContent类型,并通过shareDialog分享到Facebook

分享链接:

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:@"https://developers.facebook.com"];
FBSDKShareDialog *dialog = [[FBSDKShareDialog alloc] init];
dialog.fromViewController = self;
dialog.content = content;
dialog.mode = FBSDKShareDialogModeShareSheet;
[dialog show];

分享图片

  • 图片必须小于12MB
  • 可分享多张图片
NSMutableArray* photos = [[NSMutableArray alloc] initWithCapacity:images.count];
for (UIImage* image in images) {
     FBSDKSharePhoto* photo = [[FBSDKSharePhoto alloc] init];
     photo.image = image;
     photo.userGenerated = YES;
        
     [photos addObject:photo];
}
    
FBSDKSharePhotoContent* content = [[FBSDKSharePhotoContent alloc] init];
content.photos = photos;
FBSDKShareDialog *dialog = [[FBSDKShareDialog alloc] init];
dialog.fromViewController = self;
dialog.content = content;
dialog.mode = FBSDKShareDialogModeShareSheet;
[dialog show];

分享本地视频

  • 视频大小必须小于 50MB。
FBSDKShareVideo *video = [[FBSDKShareVideo alloc] init];
video.videoURL = url;   //亲测该URL必须是相册视频URL,如果是[NSURL fileURLWithPath:filePath],分享不了,必须写入相册
FBSDKShareVideoContent *content = [[FBSDKShareVideoContent alloc] init];
content.video = video;
content.hashtag = [FBSDKHashtag hashtagWithString:hashTag];  //还可加上话题,字符串必须带有#,只能带一个话题

同时分享图片和视频

  • 用户使用的 iOS 版本至少应为 7.0。
  • 分享内容的用户应安装版本 52.0 或以上的 iOS 版 Facebook 客户端。
  • 照片大小必须小于 12MB,视频大小必须小于 50MB。
  • 用户最多可以分享 1 个视频加 29 张照片,或最多分享 30 张照片。
FBSDKSharePhoto *photo = [FBSDKSharePhoto photoWith...
FBSDKShareVideo *video = [FBSDKShareVideo videoWith...
FBSDKShareMediaContent *content = [FBSDKShareMediaContent new];
content.media = @[photo, video];

分享到WhatsApp

分享内容到WhatsApp,只能通过openURL和原生系统分享的方式,官方网站:https://faq.whatsapp.com/en/iphone/23559013

分享文字

  • 分享文字使用的是openURL的方式,如果文字中带有链接,也能识别出是链接
NSString *urlString = [NSString stringWithFormat:@"whatsapp://send?text=%@", encodeText];
BOOL ret = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
if (ret) {

} else {
  NSLog("failed to share");
}

分享图片

分享图片只能使用iOS的系统分享,采用UIDocumentInteractionController

NSString *savePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/whatsAppTmp.wai"];
[UIImageJPEGRepresentation(image, 1.0) writeToFile:savePath atomically:YES];
UIDocumentInteractionController *documentInteractionController =
            [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:savePath]];
documentInteractionController.UTI = @"net.whatsapp.image";
documentInteractionController.delegate = self;
BOOL success = [documentInteractionController presentOpenInMenuFromRect:CGRectZero inView:viewController.view animated:YES];

分享本地视频

  • 除了文字之外,分享其他内容到WhatsApp只能调用系统分享,以URL的形式
  • 不知道为啥UIDocumentInteractionController 分享不了视频,只能用UIActivityViewController了
NSMutableArray* items = [NSMutableArray new];
NSURL *url =  [NSURL fileURLWithPath:filePath];   //filePath为是本地视频路径,可以是沙盒路径,也可以是文件目录路径
if (url) {
      [items addObject:url];
}
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
activityVC.excludedActivityTypes = @[ UIActivityTypePostToFacebook, UIActivityTypePostToTwitter ];
if ([SystemInfo isPad]) {
   if ([activityVC respondsToSelector:@selector(popoverPresentationController)]) {
          // iOS8
       activityVC.popoverPresentationController.sourceView = viewController.view;
       activityVC.popoverPresentationController.sourceRect =
       CGRectMake(viewController.view.frame.size.width * 4 / 5, viewController.view.frame.size.height - 80, 0, 0);
       activityVC.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionAny;
    }
}

分享到Instagram

分享图片

分享图片通过存入相册再分享

分享视频

分享视频到Instagram,必须通过相册URL

NSURL *movieURL = [NSURL fileURLWithPath:filePath];  //filePath为本地视频的路径
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeVideoAtPathToSavedPhotosAlbum:movieURL completionBlock:^(NSURL *assetURL, NSError *error) {
    if (error || !assetURL) {
        NSLog(@"write video to album error");
    }
    NSString *assetPath = [[assetURL absoluteString] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet alphanumericCharacterSet]];
    NSString *captionItem = [caption stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet alphanumericCharacterSet]];
    NSURL *instagramURL = [NSURL URLWithString:[NSString stringWithFormat:@"instagram://library?AssetPath=%@&InstagramCaption=%@", assetPath, captionItem]];            
    BOOL ret = [[UIApplication sharedApplication] openURL:instagramURL];
    if (ret) {
    } else {
        NSLog("failed to share");
    }
}];

分享到VK

在iOS应用内分享内容到VK,由VKsdk支持,sdk支持分享链接、文字和图片,通过VKShareDialogController进行交互,官方网站:https://vk.com/dev/ios_sdk
而本地视频只能通过系统原生分享的方式,传入相册视频url进行分享

通过sdk进行分享

VKShareDialogController * shareDialog = [VKShareDialogController new]; 
shareDialog.text = @"This post created using #vksdk #ios"; 
shareDialog.vkImages = @[@"-10889156_348122347",@"7840938_319411365",@"-60479154_333497085"]; 
shareDialog.shareLink = [[VKShareLink alloc] initWithTitle:@"Super puper link, but nobody knows" link:[NSURL URLWithString:@"https://vk.com/dev/ios_sdk"]]; 
[shareDialog setCompletionHandler:^(VKShareDialogControllerResult result) { 
    [self dismissViewControllerAnimated:YES completion:nil]; 
}]; 
[self presentViewController:shareDialog animated:YES completion:nil]; 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352