iOS分享到国外社交APP调研

跳转到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 /
    • 网页内分享 (重定向到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 [跳转引导]

你可能感兴趣的:(iOS分享到国外社交APP调研)