个人感觉目前做分享的SDK,最受欢迎的就是ShareSDK和友盟的,下面我们来对比下这2个SDK在集成过程中的一些区别:
对比ShareSDK和友盟
一.SDK大小
对比环境说明:
1.只集成社交平台 新浪微博,微信,QQ
2.均不包含各自的UI库,使用最简单最基础的接口实现分享
3.均在一个新建的干净的Xcode项目中进行集成
对比数据说明
1.均使用LinkMap对项目进行统计,统计的是项目打包后所占的大小
2.表格中均统计各自必须要的库大小(如果需要第三方库,则也应计算在内;不包含系统库)
以下为统计友盟UM Share 的arm64结果的截图:
二.集成复杂度
1)注册,登录,创建应用获取key,基本没差别;
2)添加SDK,以及依赖库;
i.可以使用cocoapods集成,无需添加依赖库等配置
ii.手动集成SDK
2种方式基本没有差别;
3)代码配置
(1)设置AppKey,配置第三方平台;
友盟:
[[UMSocialManager defaultManager] setUmSocialAppkey:@"5861e5daf5ade41326001eab"]; [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:@"wxdc1e388c3822c80b" appSecret:@"3baf1193c85774b3fd9d18447d76cab0" redirectURL:nil]; [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_QQ appKey:@"1105821097"/*设置QQ平台的appID*/ appSecret:nil redirectURL:nil]; [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Sina appKey:@"3921700954" appSecret:@"04b48b094faeb16683c32669824ebdad" redirectURL:@"https://sns.whalecloud.com/sina2/callback"];
ShareSDK
[ShareSDK registerActivePlatforms:@[ @(SSDKPlatformTypeSinaWeibo), @(SSDKPlatformTypeWechat), @(SSDKPlatformTypeQQ)] onImport:^(SSDKPlatformType platformType) { switch (platformType) { case SSDKPlatformTypeWechat: [ShareSDKConnector connectWeChat:[WXApi class]]; break; case SSDKPlatformTypeQQ: [ShareSDKConnector connectQQ:[QQApiInterface class] tencentOAuthClass:[TencentOAuth class]]; break; case SSDKPlatformTypeSinaWeibo: [ShareSDKConnector connectWeibo:[WeiboSDK class]]; break; default: break; } } onConfiguration:^(SSDKPlatformType platformType, NSMutableDictionary *appInfo) { switch (platformType) { case SSDKPlatformTypeSinaWeibo: //设置新浪微博应用信息,其中authType设置为使用SSO+Web形式授权 [appInfo SSDKSetupSinaWeiboByAppKey:@"568898243" appSecret:@"38a4f8204cc784f81f9f0daaf31e02e3" redirectUri:@"http://www.sharesdk.cn" authType:SSDKAuthTypeBoth]; break; case SSDKPlatformTypeWechat: [appInfo SSDKSetupWeChatByAppId:@"wx4868b35061f87885" appSecret:@"64020361b8ec4c99936c0e3999a9f249"]; break; case SSDKPlatformTypeQQ: [appInfo SSDKSetupQQByAppId:@"100371282" appKey:@"aed9b0303e3ed1e27bae87c33761161d" authType:SSDKAuthTypeBoth]; break; default: break; } }]
其次,友盟还需要在Appdelegate.m里增加这些回调处理的方法:
// 支持所有iOS系统- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { //6.3的新的API调用,是为了兼容国外平台(例如:新版facebookSDK,VK等)的调用[如果用6.2的api调用会没有回调],对国内平台没有影响 BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url sourceApplication:sourceApplication annotation:annotation]; if (!result) { // 其他如支付等SDK的回调 } return result; } - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options { //6.3的新的API调用,是为了兼容国外平台(例如:新版facebookSDK,VK等)的调用[如果用6.2的api调用会没有回调],对国内平台没有影响 BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url options:options]; if (!result) { // 其他如支付等SDK的回调 } return result; }//支持目前所有iOS系统- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url]; if (!result) { // 其他如支付等SDK的回调 } return result; }
但是ShareSDK并不需要加这些方法。
(2)实现分享
友盟:
- (void)umshare { [UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) { // 根据platformType调用相关平台进行分享 if (platformType == UMSocialPlatformType_WechatSession) { [self shareWebPageToPlatformType:UMSocialPlatformType_WechatSession]; } else if(platformType == UMSocialPlatformType_QQ) { [self shareWebPageToPlatformType:UMSocialPlatformType_QQ]; } else if(platformType == UMSocialPlatformType_Sina) { [self shareWebPageToPlatformType:UMSocialPlatformType_Sina]; } }]; } - (void)shareWebPageToPlatformType:(UMSocialPlatformType)platformType { //创建分享消息对象 UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject]; //创建网页内容对象 NSString* thumbURL = @"https://mobile.umeng.com/images/pic/home/social/img-1.png"; // NSString *imgPath = [[NSBundle mainBundle] pathForResource:@"D11" ofType:@"jpg"]; // NSData * path =[NSData dataWithContentsOfFile:imgPath]; UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:@"欢迎使用【友盟+】社会化组件U-Share" descr:@"欢迎使用【友盟+】社会化组件U-Share,SDK包最小,集成成本最低,助力您的产品开发、运营与推广!" thumImage:thumbURL]; //设置网页地址 shareObject.webpageUrl = @"http://mobile.umeng.com/social"; //分享消息对象设置分享内容对象 messageObject.shareObject = shareObject; //调用分享接口 [[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) { if (error) { NSLog(@"************Share fail with error %@*********",error); }else{ NSLog(@"response data is %@",data); NSLog(@"分享成功"); } }]; }
ShareSDK:
//1、创建分享参数 NSMutableDictionary *shareParams = [NSMutableDictionary dictionary]; [shareParams SSDKSetupShareParamsByText:@"分享内容" images:[[NSBundle mainBundle] pathForResource:@"COD13" ofType:@"jpg"] url:[NSURL URLWithString:@"http://mob.com"] title:@"分享标题" type:SSDKContentTypeAuto]; //2、分享(可以弹出我们的分享菜单和编辑界面) [ShareSDK showShareActionSheet:nil //要显示菜单的视图, iPad版中此参数作为弹出菜单的参照视图,只有传这个才可以弹出我们的分享菜单,可以传分享的按钮对象或者自己创建小的view 对象,iPhone可以传nil不会影响 items:nil shareParams:shareParams onShareStateChanged:^(SSDKResponseState state, SSDKPlatformType platformType, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error, BOOL end) { switch (state) { case SSDKResponseStateSuccess: { NSLog(@"分享成功"); break; } case SSDKResponseStateFail: { NSLog(@"分享失败~~%@",error.description); break; } default: break; } } ];
总结:
ShareSDK:方法多为block设置结构,代码多但易于检查,层次清晰;
友盟:方法设置比较分散,平台多时不易查找问题,不过灵活多选;
个人感觉ShareSDK比友盟更好用,这不仅体现在代码设计结构上,另外ShareSDK也有更专业的技术服务!
4)设置URL Scheme以及白名单
如何设置QQ的URL Scheme?
友盟:
ShareSDK:
结论:这里可以看出ShareSDK开发文档更加详细,容易理解。
其他对比
以上就是个人的见解啊,亲们觉得哪个更方便呢,欢迎发表意见哦!