跳转到app都需要添加到白名单
在不使用第三方的情况下,采用系统原生的方法,实现分享功能。有两种方式: 一种是使用UIActivityViewController
,另外一种是使用Social框架中的SLComposeViewController
从iOS11开始,系统不允许跳过前面的选择面板直接进行第三方平台分享(实际上是来到了但立刻被dismiss了),所以,iOS11后只能采用第一种方式!
UIActivityViewController
: 来弹出分享面板
SLComposeViewController
: 来跳过分享面板直接进行第三方平台分享
因需求需要 , 需要调研下列几个国外社区三方应用的分享.
-
Facebook
- 白名单
fbshareextension fb fb2298965036780837 fbapi fbapi20130214 fbapi20130410 fbapi20130702 fbapi20131010 fbapi20131219 fbapi20140410 fbapi20140116 fbapi20150313 fbapi20150629 fbauth fbauth2 - 系统分享:
activityType = com.apple.UIKit.activity.PostToFacebook
- 系统分享支持url 图片 title
- iOS11之后国行手机无法测试
- SDK分享:
- 可获得成功/失败/取消回调
- 不能启动native的分享窗口, 那样无法获得分享完成的postId
-
FBSDKShareDialog
(分享弹窗) \FBSDKShareLinkContent
(分享内容)
- 网页分享:
- https://www.facebook.com/dialog/share?app_id={app_id}&display={page_type}&href={url}&redirect_uri={redirect_url}
- https://m.facebook.com/sharer/sharer.php?u={url}
- 回调 (完成重定向至:
facebook.com/dialog/close_window
\facebook.com/dialog/return/close
) - 参考链接: https://github.com/bradvin/social-share-urls#facebook
-
Messenger
- 白名单
fb-messenger-share-api fb-messenger-platform-20150128 fb-messenger-platform-20150218 fb-messenger-platform-20150305 fb-messenger-api20140430 fb-messenger-api - 系统分享:
activityType = com.facebook.Messenger.ShareExtension
- 未登录下, 在应用内调用Messenger系统分享会出现报错弹窗
- Messenger系统分享支持url 图片 title
- SDK分享:
- 回调和FB分享一致(可获得成功/失败/取消回调)
-
FBSDKMessageDialog
(分享弹窗) \FBSDKShareLinkContent
(分享内容)
- 网页分享(已失效):
- fb-messenger://share?link={url}&app_id={app_id}
-
Twitter
- 白名单
twitter - 系统分享:
activityType = com.apple.UIKit.activity.PostToTwitter
- 分享支持url 图片 title
- iOS11之后国行手机无法测试
- SDK分享:
- 回调和FB分享一致(可获得成功/失败/取消回调)
- 不再维护
- 网页分享:
- https://twitter.com/intent/tweet?url={url}&text={title}&via={user_id}&hashtags={hash_tags}
- 有回调(通过拦截重定向
vk.com/share.php?act=success
, 可以捕捉到分享成功的回调) - 参考链接: https://github.com/bradvin/social-share-urls#twitter
-
Google+
- 白名单
gplus - 系统分享:
activityType = com.google.GooglePlus.ShareExtension
- 分享支持url 图片 title
- SDK分享: (无)
- 打开app深度链接分享[openURL]: (gplus:/) ---- text内容需要UTF8编码
- gplus:/share?text={utf-8 text}
- 网页分享:
- https://plus.google.com/share?text={text}
- H5不建议使用,发布成功发布失败没有重定向(域名本身没变化, 只路径变 不进重定向回调中)。
- 参考链接: https://developers.google.com/+/web/share/
-
WhatsApp
- 白名单
whatsapp - 系统分享:
activityType = net.whatsapp.WhatsApp.ShareExtension
- 分享支持url 图片 title
- SDK分享: (无)
- 打开app深度链接分享[openURL]: (whatsapp://) ---- text内容需要UTF8编码
- whatsapp://send?text={utf-8 text}
- 网页分享: (需翻墙)
- https://wa.me/?text={utf-8 text}
- 不建议使用H5分享,最终也会重定向到whatsapp:// 跳转应用分享, 否则会是引导页 {需要第三方APP支持}
-
VK
- 白名单
vk vk-share vkauthorize - 系统分享:
activityType = com.vk.vkclient.shareextension
- 分享支持url 图片 title
- SDK分享: (注意事项,一定要放在FB后面)
- https://vk.com/dev/ios_sdk
- https://github.com/VKCOM/vk-ios-sdk
- 打开app深度链接分享[openURL]: (vk://)
- 暂时找不到方法打开分享页面, 只能打开app
- 网页内分享
- http://vk.com/share.php?url={url}
//pod 'VK-ios-sdk' //注意事项,一定要放在FB后面 //Note: if you already have FaceBook SDK added and one of this methods returns //[FBSDKDelegate ...] you can handle it -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication: (NSString *)sourceApplication annotation:(id)annotation { [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation]; // 放到后面.. [VKSdk processOpenURL:url fromApplication:sourceApplication]; return YES; } //注: VKShareDialogControllerResult 分享状态只有:取消 \ 完成 (无分享成功失\败)
-
Line
- 白名单
line - 系统分享:
activityType = jp.naver.line.Share
- 分享支持url 图片 title
- SDK分享: (废弃)
- 打开app深度链接分享[openURL]: (line://) 内容需要utf-8编码
- line://msg/
/ - line://msg/text/{utf-8 text}
= text / image /
- line://msg/
- 网页内分享 (重定向到undefined空白页面 - 无意义)
- https://lineit.line.me/share/ui?url={url}&text={text} [重定向: https://line.me/R/msg/text?undefined]
- 参考
- https://www.jianshu.com/p/1ef72f37919c
- https://org-media.line.me/zh_TW/
-
Telegram
- 白名单
tg - 系统分享:
activityType = ph.telegra.Telegraph.Share
- 分享支持url 图片 title
- SDK分享: (无)
- 打开app深度链接分享[openURL]: (tg://) [内容需utf-8, 支持很好]
- tg://msg?url={url}&text={utf-8 text}&to={phone_number}
- 网页内分享
- https://t.me/share/url?url={url}&text={title}&to={phone_number}
- https://telegram.me/share/url?url={url}&text={title}&to={phone_number}
-
Pinterest
- 系统分享:
activityType = pinterest.ShareExtension
- 分享支持url 图片 title
- SDK分享: (无)
- 打开app深度链接分享[openURL]: (pinterest://) -- 暂只能打开app
- pinterest://
- 网页内分享 (text不需要utf8编码, 否则框内文字会显示编码后文字)
- https://www.pinterest.com/pin/create/link/?url={link}&media={imageURL}&description={text}
- 无回调
- 系统分享:
-
Instagram
- 白名单
instagram-stories instagram instagram-capture -
系统分享:
activityType = com.burbn.instagram.shareextension
- 图片
SDK分享: (无)
-
打开app深度链接分享[openURL]: (instagram://) 暂只能打开app https://www.instagram.com/developer/mobile-sharing/iphone-hooks/
- 方式一(直接分享 - OpenURL方式):
NSURL *urlScheme = [NSURL URLWithString:@"instagram-stories://share"]; if ([[UIApplication sharedApplication] canOpenURL:urlScheme]) { // Assign background image asset and attribution link URL to pasteboard NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.shareImageUrl]]; NSArray *pasteboardItems = @[@{@"com.instagram.sharedSticker.backgroundImage" : data, @"com.instagram.sharedSticker.contentURL" : self.shareURL}]; NSDictionary *pasteboardOptions = @{UIPasteboardOptionExpirationDate : [[NSDate date] dateByAddingTimeInterval:60 * 5]}; // This call is iOS 10+, can use 'setItems' depending on what versions you support [[UIPasteboard generalPasteboard] setItems:pasteboardItems options:pasteboardOptions]; [[UIApplication sharedApplication] openURL:urlScheme options:@{} completionHandler:^(BOOL success) { if (success) { [self leaveCurrentAPPToThirdApp]; } }]; }
- 方式二(间接分享 - 再弹出系统分享选择): 分享igo文件的形式,弹起类似系统更多分享弹窗,拷贝到Instagram [速卖通 ins分享方式]
NSString *documentDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; // *.igo is exclusive to instagram NSString *saveImagePath = [documentDirectory stringByAppendingPathComponent:@"Image.igo"]; // NSData *imageData = UIImagePNGRepresentation(filteredImage); [data writeToFile:saveImagePath atomically:YES]; NSURL *imageURL=[NSURL fileURLWithPath:saveImagePath]; _docController=[[UIDocumentInteractionController alloc]init]; _docController.delegate=self; _docController.UTI=@"com.instagram.photo"; [_docController setURL:imageURL]; _docController.annotation=[NSDictionary dictionaryWithObjectsAndKeys:@"#yourHashTagGoesHere",@"InstagramCaption", nil]; [_docController presentOpenInMenuFromRect:CGRectZero inView:[UIViewController bgl_currentViewController].view animated:YES];
- 方式三(间接分享 - 再弹出系统分享选择): ps: 只能纯分享UIImage , Text或者URL不能分享, 分享则没有Ins这个Ativity
网页内分享 (无)
.
.
.
.
.
.
没装三方客户端不能实现分享(无网页分享 ): Instagram[无] / Line [重定向跳转空白页] / WhatsApp[重定向引导] / Messenger[无] / Telegram [跳转引导]