與友盟社會化分享 U-Share的愛恨情仇

公司項目需要做分享功能,本來想著只是一個簡單的分享功能,沒想到卻耗了我近一天的時間,那個心累啊,寫下這篇給那些最近需要集成分享功能的朋友們

1. 到底選擇哪一個第三方呢?

相信大家一開始也不知道改用那個吧,就功能來講,個人覺得貌似沒什么差別,只說一下我的經(jīng)歷,因為我之前做分享都是用的友盟,所以,我第一想到的就是友盟,有事二話沒說,就用Pod 搜了一下友盟,結(jié)果是這樣的:


pod search UMengSocial.png

但是看官網(wǎng),最新版卻是:


Pod 到的最新版是5.2.1 而 最新SDK的版本是6.0.1的,我們當然要用最新的了,因為最新的支持iOS10,還支持自動隱藏未安裝的客戶端等新特性,像友盟分享,這樣的第三方,能用Pod 還是用Pod ,因為,首先Pod可以給我做SDK包依賴等,省去開發(fā)者的很多環(huán)境配置,主要還是,隨著iOS系統(tǒng)的升級、更新,share的SDK勢必也要更新,而我們只需要pod update就好了,不要做更多是操作,好處不言而喻了, 可是現(xiàn)在的這種情況是...我想,友盟新版不會不支持Pod了吧.....
于是,我果斷的問了客服,客服的告訴我 :目前新版還不支持Pod,是的,你沒看錯,是不支持,但是說這兩天就會更新的,可以耐心的等待下。。。。
老實說,我倒是想耐心等待,可是項目不等人啊,沒辦法硬著頭皮去看shareSDK了,結(jié)果發(fā)現(xiàn),它是支持Pod的,而且是最新版的。心想:貌似shareSDK效率比UMeng靠譜很多啊,于是準備Pod。。
經(jīng)過漫長等待后,得到的結(jié)果只這樣的,如官方的示例


shareSDK的QA.png

我不會告訴你,我從昨天Pod少說Pod了一二十遍了,結(jié)果無一例外,但就在寫這篇博文的時候,我又試了一下,結(jié)果竟然又成功了,我還能說什呢???郁悶

2. 一個好扯淡的問題

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

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

還有需要適配iOS10,需要在info.plist中加入安全域名白名單,值得一提的是,iOS10對權(quán)限的要求更高了,相冊,相機等也需要配置權(quán)限,詳細的信息配置 可以再友盟的官網(wǎng)看到,我就不廢話了。,提示大家,配置代碼不要粘錯了哦。
一切準備就緒后,運行程序,在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;
///可分享的數(shù)組
@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;
///列數(shù)
@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) {//如果沒有有效的分享平臺,則不創(chuàng)建分享菜單
            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;//取余數(shù)作為列
        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",@"點點蟲動態(tài)");
            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];
    //為各平臺創(chuàng)建按鈕
    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;
}

這里,已經(jīng)加了隱藏未有的App圖標了,然后在UMSocialUIManager.m里面

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

把View換成我們創(chuàng)建的View 就好了,后面根據(jù)UI修改我們創(chuàng)建的UI界面,就很方便了。如果有什么問題和錯題,歡迎大家指正,不勝感謝?。?!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容