友盟分享功能的实现

1.本机的分享

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

    //判断功能是否可用
    if (![SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo]) {
        return;
    }
    //创建分享控制器
    SLComposeViewController *vc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo];
    // 设置蚊子
    [vc setInitialText:@"我是蚊子"];
    // 设置图片
    [vc addImage:[UIImage imageNamed:@"sdf"]];
    // 设置网址
    [vc addURL:[NSURL URLWithString:@"www.123"]];
    //模态弹出
    [self presentViewController:vc animated:YES completion:nil];
}

注意!只能用两个微博


友盟分享功能的实现_第1张图片

2.友盟分享

友盟分享的开发文档:
http://dev.umeng.com/social/ios/quick-integration?spm=0.0.0.0.ZOvbvz

下载sdk时候的选项


友盟分享功能的实现_第2张图片

最近编写了一个友盟分享的Demo,实现了友盟自带分享 UI 和自定义分享 UI 两个样式将分享的内容分享到微信和 QQ。下面是具体的实现过程:

  • 首先注册账号获取相应的配置信息

  • 友盟开发者账号 ------ 获取 appkey

  • 微信开发者账号------获取 appid 和 APPSecret

  • QQ 开发者账号------获取 appid 和 appkey

  • 下载友盟分享的 SDK
     有两种方式:
     1、官网下载 SDK,下载完成之后导入到项目中。
     2、使用 cocoapods 集成友盟:在 Podfile中写入 pod 'UMengSocial',可以参考文档:http://www.cnblogs.com/huahua0809/p/4933536.html

  • 添加 SDK 依赖的系统库文件
     在 Xcode 中打开工程配置文件,选择“summary”一栏,选择“Linked Frameworks and Libraries”一栏,点击“+”图标添加下面八个库文件,分别是:

    • Security.framework
    • libiconv.dylib
    • SystemConfiguration.framework
    • CoreGraphics.Framework
    • libsqlite3.dylib
    • CoreTelephony.framework
    • libstdc++.dylib
    • libz.dylib

这只是其中的一部分,不同的平台依赖的系统库文件不同,根据官方文档添加即可

  • 配置 URL schemes
     在你的工程设置项,targets一栏下,选中自己的 target,在 info->URL Types 根据官方文档添加 URL Schemes

  • 设置白名单
     如果你的应用使用了如 SSO 授权登录或者跳转分享功能,在 iOS 9下需要增加一个可跳转的白名单,指定对应跳转 APP 的 URL Scheme,否则将在第三方平台判断是否跳转时用到的 canOpenURL 时返回 NO,进而只进行 webview 授权或者授权/分享失败

LSApplicationQueriesSchemes

wechat
weixin


sinaweibohd
sinaweibo
sinaweibosso
weibosdk
weibosdk2.5


mqqapi
mqq
mqqOpensdkSSoLogin
mqqconnect
mqqopensdkdataline
mqqopensdkgrouptribeshare
mqqopensdkfriend
mqqopensdkapi
mqqopensdkapiV2
mqqopensdkapiV3
mqzoneopensdk
wtloginmqq
wtloginmqq2
mqqwpa
mqzone
mqzonev2
mqzoneshare
wtloginqzone
mqzonewx
mqzoneopensdkapiV2
mqzoneopensdkapi19
mqzoneopensdkapi
mqqbrowser
mttbrowser


renrenios
renrenapi
renren
renreniphone


laiwangsso


yixin
yixinopenapi


instagram


whatsapp


line


fbapi
fb-messenger-api
fbauth2
fbshareextension

代码实现

  • 在AppDelegate内设置友盟AppKey
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   
  [UMSocialData setAppKey:UMAppKey];
  [UMSocialWechatHandler setWXAppId:WeChatAppId appSecret:WeChatAppSecret url:@"http://www.jianshu.com/users/238e769238c2/latest_articles"];
  [UMSocialQQHandler setQQWithAppId:QQAppID appKey:QQAppKey url:@"http://www.jianshu.com/users/238e769238c2/latest_articles"];
  return YES;
}
  • 系统自带分享UI实现分享
[UMSocialSnsService presentSnsIconSheetView:self
                                       appKey:@"570c660367e58e91600010a5"
                                    shareText:@"花花的"
                                   shareImage:[UIImage imageNamed:@"icon.png"]
                              shareToSnsNames:[NSArray arrayWithObjects:UMShareToWechatSession,UMShareToWechatTimeline,UMShareToWechatFavorite,UMShareToQQ,UMShareToQzone,nil]
                                     delegate:self];

效果展示

友盟分享功能的实现_第3张图片

  • 自定义分享UI显示分享
    • .h文件代码:
 #import 
#import "UMSocial.h"
@interface XHCustomShareView : UIView
+(instancetype)shareViewWithPresentedViewController:(UIViewController *)controller items:(NSArray *)items title:(NSString *)title image:(UIImage *)image urlResource:(NSString *)url;
@end
  • .m文件代码:
#import "XHCustomShareView.h"
#define KHeight self.frame.size.height
#define kWidth self.frame.size.width
#define ShareViewHeight 155

@interface XHCustomShareView()
/** 分享内容属性  */
@property (nonatomic,strong)NSArray *items;
@property (nonatomic,copy)NSString *title;
@property (nonatomic,copy)UIImage *image;
@property (nonatomic,copy)NSString *url;
@property (nonatomic,strong)UIViewController *controller;
/** UI属性 */

@property (nonatomic,strong)UIView *buttomView;
@property (nonatomic,strong)UIView *contentView;
@end
@implementation XHCustomShareView
#pragma mark - 自定义初始化类方法
+(instancetype)shareViewWithPresentedViewController:(UIViewController *)controller items:(NSArray *)items title:(NSString *)title image:(UIImage *)image urlResource:(NSString *)url{
  XHCustomShareView *view = [[XHCustomShareView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)];
  view.title = title;
  view.url = url;
  view.image = image;
  view.items = items;
  view.controller = controller;
  [view createShareView];
  return view;
}
#pragma mark - 创建分享UI
-(void)createShareView{
  /*------------------  添加蒙板  -------------------*/
  _buttomView = [[UIView alloc] initWithFrame:self.bounds];
  _buttomView.backgroundColor = [UIColor blackColor];
  _buttomView.alpha = 0.0;
  [_buttomView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissShareView)]];
  [self addSubview:_buttomView];
  /*------------------------------------------------*/
  /*---------- 内容view,包括分享itemsView以及取消按钮 ----------*/
 _contentView = [[UIView alloc] initWithFrame:CGRectMake(0, KHeight, kWidth, ShareViewHeight)];
  _contentView.backgroundColor = [UIColor clearColor];
  [self addSubview:_contentView];
  //分享ItemsView
  UIScrollView *shareItemView = [[UIScrollView alloc] initWithFrame:CGRectMake(10, 0, kWidth-20, 100)];
  shareItemView.backgroundColor = [UIColor whiteColor];
  shareItemView.layer.cornerRadius = 10;
  shareItemView.layer.masksToBounds = YES;
  shareItemView.showsVerticalScrollIndicator = NO;
  shareItemView.showsHorizontalScrollIndicator = NO;
  [_contentView addSubview:shareItemView];
  if (_items.count) {
      CGFloat itemWidth  = 50;
      CGFloat itemHeight = 50;
      CGFloat pading = _items.count<5 ? (shareItemView.width-itemHeight*_items.count)/(_items.count+1) : 30;
      for (int i=0; i<_items.count; i++) {
          UIButton * itemBtn = [[UIButton alloc] initWithFrame:CGRectMake((itemWidth+pading)*i+pading, 15, itemWidth, itemHeight)];
          itemBtn.tag = i;
          NSString *itemName =  [self getTitleAndImageWithItem:itemBtn];
          [itemBtn addTarget:self action:@selector(itemClick:) forControlEvents:UIControlEventTouchUpInside];
          [shareItemView addSubview:itemBtn];
          UILabel *itemLabel = [[UILabel alloc] initWithFrame:CGRectMake(itemBtn.left, itemBtn.bottom+5, itemWidth, 20)];
          itemLabel.text = itemName;
          itemLabel.font = [UIFont systemFontOfSize:12];
          itemLabel.textAlignment = NSTextAlignmentCenter;
          [shareItemView addSubview:itemLabel];
      }
      shareItemView.contentSize = CGSizeMake((itemWidth+pading)*_items.count+pading, 0);
  }
  //取消按钮
  UIButton *cancelbtn = [[UIButton alloc] initWithFrame:CGRectMake(10, CGRectGetMaxY(shareItemView.frame)+10, kWidth-20, 40)];
  cancelbtn.layer.cornerRadius = 10;
  cancelbtn.layer.masksToBounds = YES;
  [cancelbtn setTitle:@"取消" forState:UIControlStateNormal];
  cancelbtn.backgroundColor = [UIColor whiteColor];
  [cancelbtn addTarget:self action:@selector(dismissShareView) forControlEvents:UIControlEventTouchUpInside];
  [cancelbtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
  [_contentView addSubview:cancelbtn];
  [UIView animateWithDuration:0.3 animations:^{
      _buttomView.alpha = 0.3;
      _contentView.frame = CGRectMake(0, KHeight-ShareViewHeight, kWidth, ShareViewHeight);

  }];
  /*----------------------------------------------------------*/
}
#pragma mark - 设置item图片以及获取title
-(NSString *)getTitleAndImageWithItem:(UIButton *)itemBtn{
  NSString *itemTitle = @"";
  NSString *itemImage = @"";
  NSString *type = _items[itemBtn.tag];
  if ([type isEqualToString:UMShareToQzone]) {
      itemTitle = @"QQ空间";
      itemImage = @"share_qzone";
  }
  else if([type isEqualToString:UMShareToQQ])
  {
      itemTitle = @"QQ";
      itemImage = @"";
  }
  else if([type isEqualToString:UMShareToWechatSession])
  {
      itemTitle = @"微信好友";
      itemImage = @"share_weixin";
  }
  else if([type isEqualToString:UMShareToWechatTimeline])
  {
      itemTitle = @"朋友圈";
      itemImage = @"share_circle";
  }
  else if([type isEqualToString:UMShareToWechatFavorite])
  {
      itemTitle = @"微信收藏";
      itemImage = @"";
  }
  else if([type isEqualToString:UMShareToSina])
  {
      itemTitle = @"新浪";
      itemImage = @"share_sina";
  }
  else{
      NSLog(@"其他设备自行添加");
  }
  [itemBtn setImage:[UIImage imageNamed:itemImage] forState:UIControlStateNormal];
  return itemTitle;
}
#pragma mark - 点击item进行分享操作
-(void)itemClick:(UIButton *)btn{
  NSInteger index = btn.tag;
  [[UMSocialDataService defaultDataService]  postSNSWithTypes:@[_items[index]] content:_title image:_image location:nil urlResource:nil presentedController:_controller completion:^(UMSocialResponseEntity *response){
      if (response.responseCode == UMSResponseCodeSuccess) {
          NSLog(@"分享成功!");
      }
  }];
}
#pragma mark - 点击 取消或者蒙板 消除分享View
-(void)dismissShareView{
  [UIView animateWithDuration:0.3 animations:^{
      _buttomView.alpha = 0.0;
      _contentView.frame = CGRectMake(0, KHeight, kWidth, ShareViewHeight);
  } completion:^(BOOL finished) {
      [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
      [self removeFromSuperview];
  }];
}
@end

  • 调用实现分享

XHCustomShareView *shareView = [XHCustomShareView shareViewWithPresentedViewController:self items:@[UMShareToWechatSession,UMShareToWechatTimeline,UMShareToQzone] title:@"张三儿" image:[UIImage imageNamed:@"icon.png"] urlResource:nil];
[[UIApplication sharedApplication].keyWindow addSubview:shareView];

![](http://upload-images.jianshu.io/upload_images/2092665-de42f7138183b4a9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

你可能感兴趣的:(友盟分享功能的实现)