与友盟社会化分享 U-Share的爱恨情仇

公司项目需要做分享功能,本来想着只是一个简单的分享功能,没想到却耗了我近一天的时间,那个心累啊,写下这篇给那些最近需要集成分享功能的朋友们

1. 到底选择哪一个第三方呢?

相信大家一开始也不知道改用那个吧,就功能来讲,个人觉得貌似没什么差别,只说一下我的经历,因为我之前做分享都是用的友盟,所以,我第一想到的就是友盟,有事二话没说,就用Pod 搜了一下友盟,结果是这样的:


pod search UMengSocial.png

但是看官网,最新版却是:


Pod 到的最新版是5.2.1 而 最新SDK的版本是6.0.1的,我们当然要用最新的了,因为最新的支持iOS10,还支持自动隐藏未安装的客户端等新特性,像友盟分享,这样的第三方,能用Pod 还是用Pod ,因为,首先Pod可以给我做SDK包依赖等,省去开发者的很多环境配置,主要还是,随着iOS系统的升级、更新,share的SDK势必也要更新,而我们只需要pod update就好了,不要做更多是操作,好处不言而喻了, 可是现在的这种情况是...我想,友盟新版不会不支持Pod了吧.....
于是,我果断的问了客服,客服的告诉我 :目前新版还不支持Pod,是的,你没看错,是不支持,但是说这两天就会更新的,可以耐心的等待下。。。。
老实说,我倒是想耐心等待,可是项目不等人啊,没办法硬着头皮去看shareSDK了,结果发现,它是支持Pod的,而且是最新版的。心想:貌似shareSDK效率比UMeng靠谱很多啊,于是准备Pod。。
经过漫长等待后,得到的结果只这样的,如官方的示例


shareSDK的QA.png

我不会告诉你,我从昨天Pod少说Pod了一二十遍了,结果无一例外,但就在写这篇博文的时候,我又试了一下,结果竟然又成功了,我还能说什呢???郁闷

2. 一个好扯淡的问题

整理好心情,昨天的Pod不给力,那没办法,只能集成SDK了,既然是集成SDK,我当然还是用我熟悉的UMeng啦
按照官方给出的方法,一一做就好了,我就不多啰嗦了

  • 我只是做新浪、微信、qq这几种,so URL Types 的配置如下:
URLtypes.png

还有需要适配iOS10,需要在info.plist中加入安全域名白名单,值得一提的是,iOS10对权限的要求更高了,相册,相机等也需要配置权限,详细的信息配置 可以再友盟的官网看到,我就不废话了。,提示大家,配置代码不要粘错了哦。
一切准备就绪后,运行程序,在link包的时候爆出 Duplicate Symbol 的错误,具体不记得了,翻译过里啊,就是说有2 个重复的标识,一个是Tencent的包里面,还有一个指的是TCWebViewController,这这两个重复了,因为项目的前缀是TC ,估计是这文件和腾讯里的某个文件重名了吧,所以,改了TCWebViewController为TCWKWebViewController,没想过倒是解决了,感觉好扯啊,之后集成就很顺利了。

3. 自定义分享弹出界面

因为项目只需要,微博、QQ 、微信 共个图标,所以,用友盟的默认图标集成UI界面 好丑啊,简直看不下去,而且,自己的扩展性也不高,所以,因为,模拟器看不出效果,所以就不贴图了,直接上代码:

#import <UIKit/UIKit.h>
#import <UMSocialCore/UMSocialCore.h>
typedef void(^UMSocialSharePlatformSelectionBlock)(UIView *NewsShareView,UMSocialPlatformType platformType);
@interface TCHomeNewsShareView : UIView
@property (nonatomic, assign) UMSocialPlatformType selectionPlatform;
@property (nonatomic, copy) UMSocialSharePlatformSelectionBlock shareSelectionBlock;
///可分享的数组
@property (nonatomic, strong) NSMutableArray *sharePlatformInfoArray;

- (void)show;
- (void)hiddenShareMenuView; 
#import "TCHomeNewsShareView.h"
#import "UMShareMenuItem.h"

static NSString *kUMSplatformType = @"kUMSplatformType";
static NSString *kUMSSharePlatformType = @"kUMSSharePlatformType";
static NSString *kUMSSharePlatformIconName = @"kUMSSharePlatformIconName";
static NSString *kUMSSharePlatformItemView = @"UMSSharePlatformItemView";
@interface TCHomeNewsShareView ()
///半透明背景视图
@property (nonatomic, strong) UIView *backgroundGrayView;
///退出按钮
@property (nonatomic, strong) UIButton *cancelButton;
///列数
@property (nonatomic, assign) NSInteger columnCount;
///按钮大小
@property (nonatomic, assign) CGSize itemSize;//按钮大小
@end

@implementation TCHomeNewsShareView

- (instancetype)init {
    self = [super initWithFrame:CGRectMake(0, kScreenH, kScreenW, 188)];
    if (self){
        [self addSubview:self.cancelButton];
        self.columnCount = 3;
        self.itemSize = CGSizeMake(70, 70);
        self.backgroundColor = [UIColor whiteColor];
        //获取可分享平台
        NSMutableArray *platformArray = [[NSMutableArray alloc] init];
        for (NSNumber *platformType in [UMSocialManager defaultManager].platformTypeArray) {
            NSMutableDictionary *dict = [self dictWithPlatformName:platformType];
            [dict setObject:platformType forKey:kUMSSharePlatformType];
            if (dict) {
                [platformArray addObject:dict];
            }
        }
        if (platformArray.count == 0) {//如果没有有效的分享平台,则不创建分享菜单
            UMSocialLogDebug(@"There is no any valid platform");
            return nil;
        }
        
        [platformArray sortUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
            if ([[obj1 valueForKey:kUMSSharePlatformType] integerValue] > [[obj2 valueForKey:kUMSSharePlatformType] integerValue]) {
                return NSOrderedDescending;
            }else{
                return NSOrderedAscending;
            }
        }];
        self.sharePlatformInfoArray = platformArray;

        
        [self reloadViewWithitems:self.sharePlatformInfoArray];
        
    }
    return self;
}

- (void)reloadViewWithitems:(NSArray *)items {
    
    CGFloat margin = (kScreenW - (self.itemSize.width * self.columnCount))/(self.columnCount + 1);
    
    for (NSInteger index = 0; index < items.count; index ++) {
        NSLog(@"%@",items[index]);
        NSInteger column = index % self.columnCount;//取余数作为列
        NSInteger line = index / self.columnCount;//取商为行
        UIView *itemView = [items[index] valueForKeyPath:kUMSSharePlatformItemView];
        itemView.frame = CGRectMake((column+1) *margin + column * self.itemSize.width, line * (kMargen + self.itemSize.height), self.itemSize.width, self.itemSize.height);
        [self addSubview:itemView];
    }
}

#pragma mark - respond event
- (void)show {
    [[UIApplication sharedApplication].keyWindow addSubview:self.backgroundGrayView];
    [[UIApplication sharedApplication].keyWindow addSubview:self];

    [UIView animateWithDuration:0.35 animations:^{
        self.top = kScreenH - self.height;
    }];
    
}

///隐藏视图
- (void)hiddenShareMenuView {
    [UIView animateWithDuration:0.35 animations:^{
        //向下移动
        self.top = kScreenH;
    } completion:^(BOOL finished) {
        [self.backgroundGrayView removeFromSuperview];
        [self removeFromSuperview];
    }];
}

#pragma mark - lazy load
///半透明背景视图
- (UIView *)backgroundGrayView {
    if (!_backgroundGrayView) {
        _backgroundGrayView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenW, kScreenH)];
        _backgroundGrayView.backgroundColor = [UIColor blackColor];
        _backgroundGrayView.alpha = 0.3;
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hiddenShareMenuView)];
        [_backgroundGrayView addGestureRecognizer:tap];
    }
    return _backgroundGrayView;
}

- (UIButton *)cancelButton {
    if (!_cancelButton) {
        _cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
        _cancelButton.frame = CGRectMake(0, self.height - 40, self.frame.size.width, 40);
        [_cancelButton addTarget:self action:@selector(hiddenShareMenuView) forControlEvents:UIControlEventTouchUpInside];
        [_cancelButton setTitle:@"取消" forState:UIControlStateNormal];
        [_cancelButton setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal];
        _cancelButton.backgroundColor = [UIColor whiteColor];
    }
    return _cancelButton;
}

#pragma mark - get platform Info
- (NSMutableDictionary *)dictWithPlatformName:(NSNumber *)platformType
{
    UMSocialPlatformType platformType_int = [platformType integerValue];
    NSString *imageName = nil;
    NSString *platformName = nil;
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:1];
    switch (platformType_int) {
        case UMSocialPlatformType_Sina:
            imageName = @"UMS_sina_icon";
            platformName = UMLocalizedString(@"sina",@"新浪微博");
            break;
        case UMSocialPlatformType_WechatSession:
            imageName = @"UMS_wechat_session_icon";
            platformName = UMLocalizedString(@"wechat",@"微信");
            break;
        case UMSocialPlatformType_WechatTimeLine:
            imageName = @"UMS_wechat_timeline_icon";
            platformName = UMLocalizedString(@"wechat_timeline",@"微信朋友圈");
            break;
        case UMSocialPlatformType_WechatFavorite:
            imageName = @"UMS_wechat_favorite_icon";
            platformName = UMLocalizedString(@"wechat_favorite",@"微信收藏");
            break;
        case UMSocialPlatformType_QQ:
            imageName = @"UMS_qq_icon";
            platformName = UMLocalizedString(@"qq",@"QQ");
            break;
        case UMSocialPlatformType_Qzone:
            imageName = @"UMS_qzone_icon";
            platformName = UMLocalizedString(@"qzone",@"QQ空间");
            break;
        case UMSocialPlatformType_TencentWb:
            imageName = @"UMS_tencent_icon";
            platformName = UMLocalizedString(@"tencentWB",@"腾讯微博");
            break;
        case UMSocialPlatformType_AlipaySession:
            imageName = @"UMS_alipay_session_icon";
            platformName = UMLocalizedString(@"alipay",@"支付宝");
            break;
        case UMSocialPlatformType_LaiWangSession:
            imageName = @"UMS_laiwang_session";
            platformName = UMLocalizedString(@"lw_session",@"点点虫");
            break;
        case UMSocialPlatformType_LaiWangTimeLine:
            imageName = @"UMS_laiwang_timeline";
            platformName = UMLocalizedString(@"lw_timeline",@"点点虫动态");
            break;
        case UMSocialPlatformType_YixinSession:
            imageName = @"UMS_yixin_session";
            platformName = UMLocalizedString(@"yixin_session",@"易信");
            break;
        case UMSocialPlatformType_YixinTimeLine:
            imageName = @"UMS_yixin_timeline";
            platformName = UMLocalizedString(@"yixin_timeline",@"易信朋友圈");
            break;
        case UMSocialPlatformType_YixinFavorite:
            imageName = @"UMS_yixin_favorite";
            platformName = UMLocalizedString(@"yixin_favorite",@"易信收藏");
            break;
        case UMSocialPlatformType_Douban:
            imageName = @"UMS_douban_icon";
            platformName = UMLocalizedString(@"douban",@"豆瓣");
            break;
        case UMSocialPlatformType_Renren:
            imageName = @"UMS_renren_icon";
            platformName = UMLocalizedString(@"renren",@"人人");
            break;
        case UMSocialPlatformType_Email:
            imageName = @"UMS_email_icon";
            platformName = UMLocalizedString(@"email",@"邮箱");
            break;
        case UMSocialPlatformType_Sms:
            imageName = @"UMS_sms_icon";
            platformName = UMLocalizedString(@"sms",@"短信");
            break;
        case UMSocialPlatformType_Facebook:
            imageName = @"UMS_facebook_icon";
            platformName = UMLocalizedString(@"facebook",@"Facebook");
            break;
        case UMSocialPlatformType_Twitter:
            imageName = @"UMS_twitter_icon";
            platformName = UMLocalizedString(@"twitter",@"Twitter");
            break;
        case UMSocialPlatformType_Instagram:
            imageName = @"UMS_instagram_icon";
            platformName = UMLocalizedString(@"instagram",@"Instagram");
            break;
        case UMSocialPlatformType_Line:
            imageName = @"UMS_line_icon";
            platformName = UMLocalizedString(@"line",@"Line");
            break;
        case UMSocialPlatformType_Flickr:
            imageName = @"UMS_flickr_icon";
            platformName = UMLocalizedString(@"flickr",@"Flickr");
            break;
        case UMSocialPlatformType_KakaoTalk:
            imageName = @"UMS_kakao_icon";
            platformName = UMLocalizedString(@"kakaoTalk",@"KakaoTalk");
            break;
        case UMSocialPlatformType_Pinterest:
            imageName = @"UMS_pinterest_icon";
            platformName = UMLocalizedString(@"pinterest",@"Pinterest");
            break;
        case UMSocialPlatformType_Tumblr:
            imageName = @"UMS_tumblr_icon";
            platformName = UMLocalizedString(@"tumblr",@"Tumblr");
            break;
        case UMSocialPlatformType_Linkedin:
            imageName = @"UMS_linkedin_icon";
            platformName = UMLocalizedString(@"linkedin",@"Linkedin");
            break;
        case UMSocialPlatformType_Whatsapp:
            imageName = @"UMS_whatsapp_icon";
            platformName = UMLocalizedString(@"whatsapp",@"Whatsapp");
            break;
            
        default:
            break;
    }
    
    [dict setObject:UMSocialPlatformIconWithName(imageName) forKey:kUMSSharePlatformIconName];
    [dict setObject:platformName forKey:kUMSplatformType];
    //为各平台创建按钮
    UMShareMenuItem *cell = [[UMShareMenuItem alloc] init];
    [cell reloadDataWithImage:[UIImage imageNamed:UMSocialPlatformIconWithName(imageName)] platformName:platformName];
    cell.index = platformType_int;
    
    __weak typeof(self) weakSelf = self;
    cell.tapActionBlock = ^(NSInteger index){
        __strong typeof(TCHomeNewsShareView *)strongSelf = weakSelf;
        strongSelf.selectionPlatform = index;
        if (strongSelf.shareSelectionBlock) {
            [strongSelf hiddenShareMenuView];
            strongSelf.shareSelectionBlock(strongSelf, index);
        }
    };
    [dict setObject:cell forKey:kUMSSharePlatformItemView];
    
    return dict;
}

这里,已经加了隐藏未有的App图标了,然后在UMSocialUIManager.m里面

- (void)creatShareSelectionView
{
   TCHomeNewsShareView *shareView = [[TCHomeNewsShareView alloc] init];
    self.shareMenuView = shareView;
}

把View换成我们创建的View 就好了,后面根据UI修改我们创建的UI界面,就很方便了。如果有什么问题和错题,欢迎大家指正,不胜感谢!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容