公司項目需要做分享功能,本來想著只是一個簡單的分享功能,沒想到卻耗了我近一天的時間,那個心累啊,寫下這篇給那些最近需要集成分享功能的朋友們
1. 到底選擇哪一個第三方呢?
相信大家一開始也不知道改用那個吧,就功能來講,個人覺得貌似沒什么差別,只說一下我的經(jīng)歷,因為我之前做分享都是用的友盟,所以,我第一想到的就是友盟,有事二話沒說,就用Pod 搜了一下友盟,結(jié)果是這樣的:

但是看官網(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é)果只這樣的,如官方的示例

我不會告訴你,我從昨天Pod少說Pod了一二十遍了,結(jié)果無一例外,但就在寫這篇博文的時候,我又試了一下,結(jié)果竟然又成功了,我還能說什呢???郁悶
2. 一個好扯淡的問題
整理好心情,昨天的Pod不給力,那沒辦法,只能集成SDK了,既然是集成SDK,我當然還是用我熟悉的UMeng啦
按照官方給出的方法,一一做就好了,我就不多啰嗦了
- 我只是做新浪、微信、qq這幾種,so URL Types 的配置如下:

還有需要適配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界面,就很方便了。如果有什么問題和錯題,歡迎大家指正,不勝感謝?。?!