每一个app的开发者都会面临这样一个问题,我的应用需要一个分享功能,我应该怎么实现呢?
这时你有两个选择,一是去对应的三方平台下载对应的原生SDK,另一种就是去使用成型的分享SDK,如友盟分享等。下面对比一下原生SDK与原生分享的区别。
原生与友盟分享的对比
jar大小
友盟的jar为用户提供了精简,去掉了不常用的功能,并且由于对各个分享平台共性的代码进行了统一,所以jar更小。
三方平台 | 精简版 | 完整版 |
---|---|---|
微信 | 32.09k | 235.32k |
43k | 348.65kk | |
新浪 | 17.82k | 701.21k |
代码逻辑
友盟分享对分享的逻辑进行了精简,将所有平台的逻辑进行了统一,也就是说,开发者可以通过调用同一行代码,实现对所有平台的分享或者授权。这当然原生平台没有做到的。
集成难易程度
各个三方的平台的分享,各家有各家的逻辑,尤其是国外平台,配置方式更是千差万别,要想集成,您需要去看所有的逻辑和demo,但是友盟分享为开发者做了统一,真正的实现了一劳永逸。
数据统计
开发者集成分享,当然是希望,可以看到用户的分享行为,关注分享量的增减。接入友盟后,友盟会为您提供专业的数据分析,如下图所示:
友盟与市场上其他产品的对比(包含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告诉开发者应该如何操作。这个可以参照我之前的一篇文章:
http://www.jianshu.com/p/1bee8f282ec7
而在其他产品中,如果出现错误,没有任何log,让开发者无所适从,不知如何修改。
参考代码
我将对比代码放在了github上,感兴趣的朋友可以对比观看
https://github.com/mymdeep/share_mob
IOS
初始化方式
在友盟中,直接引入U-share头文件,设置appkey即可。
在其它产品中,若有三方平台的SDK还要引入三方的SDK,头文件,并将三方SDK的class进行注册。
对比可知,友盟的设计为加入SDK便会自动触发注册平台,其他产品初始化的方式较为繁琐
初始化代码
在友盟中,一个平台对应一行初始化代码。
其他产品中,虽然初始化只有一个api调用,但是分多个block回调进行交互传递数据,参数较多,整个初始化全平台需要近200行代码,繁琐程度不言而喻。
分享行为
友盟分享的API设计为抽象分享行为,根据具体参数内容,内部识别。
其他产品分享入口与平台绑定,互不通用。