美文网首页
iOS 中的分享

iOS 中的分享

作者: 天空中的球 | 来源:发表于2016-12-06 14:19 被阅读198次

    最近又开始弄分享这块,特此将遇到的问题总结下,避免下次踩坑。

    一般说来,目前我们分享我们主要采取下面三种方式:

    • 系统自带的分享
      UIActivityViewController & SLComposeViewController
    • 完全自定义,自己去找其SDK
    • 第三方分享(友盟,ShareSDK)

    下面稍微以系统自带的和第三方分享稍微记录下。

    一、UIActivityViewController

    采用 UIActivityViewController 的优缺点特别明显:

    • 优点:
      代码量少,而且是用系统的保障度高,UI 格式也是原生的贴切。

    • 缺点

      • UI 虽说是原生的,但也是死的,灵活度不够
      • 不支持网页的,必须强制用户先去 设置中绑定账号,简单的说流程不够直接。
    Set

    使用代码确实很简单如下,有什么直接看 API 就OK啦

     UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:@[[NSURL URLWithString:urlString]] applicationActivities:nil];
     activityVC.excludedActivityTypes = @[UIActivityTypeAirDrop];
     [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:activityVC animated:YES completion:nil];
     activityVC.completionWithItemsHandler = ^(UIActivityType __nullable activityType, BOOL completed, NSArray * __nullable returnedItems, NSError * __nullable activityError) {
         if (completed) {
             NSLog(@"Share Success");
         }
         else {
             NSLog(@"Share Failed == %@",activityError.description);
         }
     };
    

    二、完全自定义,使用各个平台官方的SDK

    这种情况也可能有,具体看自己需求吧,例如找 一个 FaceBook 官方提供库,里面提供的文件就一大堆,然后各种 API 使用,如果需要分享的平台比较多,那就更多了。


    FaceBookShare

    优缺点那是是明显:

    • 优点: 完全自定义,UI界面,点击事件等处理相当自如。
    • 缺点: 麻烦,导入东西太多,增加 App 体积。

    三 、第三方分享(Share SDK)

    之前有总结过类似的问题 Share SDK 使用遇到的几个问题, 但是总的来说 还是一个看文档的过程,这次我使用的时候还是遇到两个问题,特此也记录下:

    • 3-1、需要直接分享,不需要走ShareSDK 中间那步骤。
    • 3-2、需要自定义 分享处的界面需要加标题。

    3-1、对于这个问题是:由于使用的官方推荐的方法导致的而导致的,之前是

    /**
     *  显示分享菜单
     *
     *  @param view                     要显示菜单的视图, iPad版中此参数作为弹出菜单的参照视图
     *  @param items                    菜单项,如果传入nil,则显示已集成的平台列表
     *  @param shareParams              分享内容参数
     *  @param shareStateChangedHandler 分享状态变更事件
     *
     *  @return 分享菜单控制器
     */
    + (SSUIShareActionSheetController *)showShareActionSheet:(UIView *)view
                                                       items:(NSArray *)items
                                                 shareParams:(NSMutableDictionary *)shareParams
                                         onShareStateChanged:(SSUIShareStateChangedHandler)shareStateChangedHandler;
    
    /**
     *  显示内容编辑视图
     *
     *  @param platformType             分享的平台类型
     *  @param otherPlatformTypes       除分享平台外,还可以分享的平台类型。
     *  @param shareParams              分享内容参数
     *  @param shareStateChangedHandler 分享状态变更事件
     *
     *  @return 内容编辑视图控制器
     */
    + (SSUIShareContentEditorViewController *)showShareEditor:(SSDKPlatformType)platformType
                                            otherPlatformTypes:(NSArray *)otherPlatformTypes
                                                  shareParams:(NSMutableDictionary *)shareParams
                                          onShareStateChanged:(SSUIShareStateChangedHandler)shareStateChangedHandler;
    

    通常使用第一种方法的时候,顺便会把第二种方法中的页面也会展示出来,此时我们感觉第二种方法

    就是前面一步省略掉
    解决方法,换一种方法就好了,直接采用 下面这个方法就好啦
    /**
     *  分享内容
     *
     *  @param platformType             平台类型
     *  @param parameters               分享参数
     *  @param stateChangeHandler       状态变更回调处理
     */
    + (void)share:(SSDKPlatformType)platformType
       parameters:(NSMutableDictionary *)parameters
    onStateChanged:(SSDKShareStateChangedHandler)stateChangedHandler;
    

    或者注意到这个方法:

    /**
     *  支持点击分享菜单栏平台后直接分享的平台(不显示分享编辑页面),默认支持微信和QQ平台。
     */
    @property (nonatomic, strong) NSMutableSet *directSharePlatforms;
    

    3-2、对于这个问题,就是相当于在 ShareSDK 的基础上自定义,实际上就是实现 Button 布局,然后利用 【分享内容】的 事件 任意制定我们想要展示的界面。但实际上个人认为,ShareSDK 上面提供的几种自定义界面已经OK了,没必要如此做的。


    综上所述,选择哪一种方式还是看自己项目中的需求吧!
    UIActivityViewController最简单;第三方最实在,看应用场景咯。

    相关文章

      网友评论

          本文标题:iOS 中的分享

          本文链接:https://www.haomeiwen.com/subject/cxsxmttx.html