分享技术哪家强

2,249 阅读5分钟
原文链接: www.jianshu.com

每一个app的开发者都会面临这样一个问题,我的应用需要一个分享功能,我应该怎么实现呢?
这时你有两个选择,一是去对应的三方平台下载对应的原生SDK,另一种就是去使用成型的分享SDK,如友盟分享等。下面对比一下原生SDK与原生分享的区别。

原生与友盟分享的对比

jar大小

友盟的jar为用户提供了精简,去掉了不常用的功能,并且由于对各个分享平台共性的代码进行了统一,所以jar更小。

三方平台 精简版 完整版
微信 32.09k 235.32k
QQ 43k 348.65kk
新浪 17.82k 701.21k

代码逻辑

友盟分享对分享的逻辑进行了精简,将所有平台的逻辑进行了统一,也就是说,开发者可以通过调用同一行代码,实现对所有平台的分享或者授权。这当然原生平台没有做到的。

集成难易程度

各个三方的平台的分享,各家有各家的逻辑,尤其是国外平台,配置方式更是千差万别,要想集成,您需要去看所有的逻辑和demo,但是友盟分享为开发者做了统一,真正的实现了一劳永逸。

数据统计

开发者集成分享,当然是希望,可以看到用户的分享行为,关注分享量的增减。接入友盟后,友盟会为您提供专业的数据分析,如下图所示:


Paste_Image.png

Paste_Image.png

友盟与市场上其他产品的对比(包含android和IOS)

看官肯定会问,为什么市面上有那么多分享的产品,这里独推友盟,原因很简单,笔者认为,友盟的分享的每一步设计真正做到了为开发者考虑,下面对比一下各个品牌的分享产品(文章的最后会有一个demo,笔者没有信口开河,这个demo集成了友盟和另一家分享产品,感兴趣的朋友可以看看)。

Android

接口功能对比

内容 友盟 其他产品 说明
appkey的设置 程序中 assets的xml中 放在assets中的文件直接解压缩就可以打开,增加了数据暴露的风险
分享面板的依赖 jar 源码 友盟是通过jar依赖,用户通过调用设置方法进行设置,更加简便,不易出错
资源文件遗漏 会有log提示缺少什么文件 不会报错,可正常运行,只是对应图片不会显示 其他产品的这种方式很容易让开发者出错,而且很难定位错误原因
对分享图片的处理 支持传入任何形式的图片 只支持三方平台需要的类型 友盟的工程师内部为用户提供了图片转化的功能,不管你传入的图片是什么类型,我们会内部转为三方平台需要的类型,如果需要还会做好压缩处理,防止OOM
分享类型的设置 只需要传入对应的分享内容即可 需要传递分享类型参数 友盟的工程师会根据用户传递进来的分享内容智能判断分享类型,省去了开发者呢的工作
回调的线程 统一回调到主线程 回调到子线程 不管进行什么样的操作,回调之后一般都要进行界面的更新,友盟更加贴心的回调到了主线程,方便用户进行界面的更新,其他产品还需要在子线程中将界面的更改post到主线程
内存泄漏 6.2.1版本后修复了内存泄漏问题 仍有内存泄漏 友盟为了解决这个问题,特意为开发者增加了释放的功能,消除了内存泄漏
后台应用被杀死,没有授权回调 提供了解决方案 无解决方案 对于部分低端手机,跳转到授权界面时,自己的应用很可能被系统杀死,这是授权回来,不再有回调,友盟为这种情况特意做了处理

单平台分享的代码对比

友盟:

new ShareAction(this).setPlatform(平台名).withText("xxxx").share();

其他分享产品:

Platform wx = ShareSDK.getPlatform(Wechat.NAME);
Wechat.ShareParams params = new Wechat.ShareParams();
params.setText("xxxxxxxxxxxxx");
params.setShareType(Platform.SHARE_IMAGE);

Platform weibo = ShareSDK.getPlatform(SinaWeibo.NAME);
SinaWeibo.ShareParams params = new SinaWeibo.ShareParams();
params.text = "xxxxx";
weibo.share(params);

由代码可以看出,分享不同平台需要构建不同类型,而在友盟,都是统一的代码,只需要传递不同的参数名即可。

集成错误自检

在友盟中,如果出现集成问题或者由于一些分享失败等,会有详细的log告诉开发者应该如何操作。这个可以参照我之前的一篇文章:
www.jianshu.com/p/1bee8f282…
而在其他产品中,如果出现错误,没有任何log,让开发者无所适从,不知如何修改。

参考代码

我将对比代码放在了github上,感兴趣的朋友可以对比观看
github.com/mymdeep/sha…

IOS

初始化方式

在友盟中,直接引入U-share头文件,设置appkey即可。
在其它产品中,若有三方平台的SDK还要引入三方的SDK,头文件,并将三方SDK的class进行注册。
对比可知,友盟的设计为加入SDK便会自动触发注册平台,其他产品初始化的方式较为繁琐

初始化代码

在友盟中,一个平台对应一行初始化代码。
其他产品中,虽然初始化只有一个api调用,但是分多个block回调进行交互传递数据,参数较多,整个初始化全平台需要近200行代码,繁琐程度不言而喻。

分享行为

友盟分享的API设计为抽象分享行为,根据具体参数内容,内部识别。
其他产品分享入口与平台绑定,互不通用。