文档章节

社会化分享插件集成分享

 佳妮
发布于 10/19 10:24
字数 2351
阅读 19
收藏 0

一.前提摘要

社会化分享每个app必备的推广需求,无论是拉新,邀请,游戏奖励,等等都离不开分享的影子,下面我们介绍下社会化分享的插件;

首先要说下,现在的社交App,社区App等,国内外的情况都是从以前的百花齐放到现在的几个巨头,现在能够真正存活下来的或者说用户群体大的,也就微信、QQ、微博、Facebook,所以,我们就简单的从这几个平台的社会化分享集成到app来对比下;

市面上社会化分享的插件还是比较多的,比如ShareSDK(Mob),U-Share(友盟+),极光等等,不过用的比较多的现在是ShareSDK的了,毕竟友盟主打的是统计,极光主打的是推送,Mob主打的ShareSDK,不过我们还是选取ShareSDK和友盟+对比下;

集成准备:需要做这几个平台的分享,或者第三方登录,必须要先去对应的第三方开发者或者开放平台申请对应的应用得到id或者key等;

QQ:http://open.qq.com

微信:http://open.qq.weixin.com

新浪:http://open.weibo.com

Facebook:https://developers.facebook.com

这个论坛中有申请流程可以参考一下:

http://bbs.mob.com/forum.php?mod=viewthread&tid=275&page=1&extra=#pid860

需要说明的QQ,如果只需要做分享的话可以不通过审核,则登录需要;

Fb做分享和登录目前都可以不需要审核;

微信和新浪必须要通过审核才可以,新浪没通过审核前可以测试,但是微信不可以;

好了上面如果准备好了我们继续往下说;

 

  • U-Share集成

下载地址:https://developer.umeng.com/sdk/android

集成文档:

https://developer.umeng.com/docs/66632/detail/66639#h1-u96C6u6210u51C6u59073

需要吐槽下,那个自动集成千万别浪费时间,我找了好久,最后问了客服,那个是统计的,分享的话目前只支持手动集成哦

首先看下面的图片,友盟这里做的还是不错的;

如上图可以看到,在微博和QQ、微信都做了精简版,我们这里只需要分享顾只下载精简版即可,具体差异可以将鼠标放到问号处自己查看;

现在下载完如下图所示:

  1. 将Common库是公共库,share文件夹中的是社会化分享需要的,都要集成到项目中;
  2. 添加回调activity,这几个平台只需要添加微信的即可

这个类是微信规定的,所以必修要放到包名.wxapi目录下;

QQ和微博不需要添加activity,但是需要在分享和登录的Activity中添加如下代码;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}

注意onActivityResult不可在fragment中实现,如果在fragment中调用登录或分享,需要在fragment依赖的Activity中实现

 

  1. 集成完资源和jar包之后,配置AndroidManifest.xml权限及Act

新浪:

   <activity
        android:name="com.umeng.socialize.media.WBShareCallBackActivity"
        android:configChanges="keyboardHidden|orientation"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:exported="false"
        >
    </activity>
    <activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
              android:configChanges="keyboardHidden|orientation"
              android:exported="false"
              android:windowSoftInputMode="adjustResize"
    >
    </activity>
    <activity
        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
        android:launchMode="singleTask"
        android:name="com.sina.weibo.sdk.share.WbShareTransActivity">
        <intent-filter>
            <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

微信:

 <activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

QQ:

     <activity
        android:name="com.tencent.tauth.AuthActivity"
        android:launchMode="singleTask"
        android:noHistory="true" >
        <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data android:scheme="tencent100424468" />
        </intent-filter>
        </activity>
        <activity
        android:name="com.tencent.connect.common.AssistActivity"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:configChanges="orientation|keyboardHidden|screenSize"/>

权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

如果需要使用QQ纯图分享或避免其它平台纯图分享的时候图片不被压缩,可以增加以下权限:

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>   
   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

Android6.0权限适配

请查看你的build.gradle文件,如果 targetSdkVersion小于或等于22,可以忽略这一步,如果大于或等于23,需要做权限的动态申请:

if(Build.VERSION.SDK_INT>=23){
                  String[] mPermissionList = new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.CALL_PHONE,Manifest.permission.READ_LOGS,Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.SET_DEBUG_APP,Manifest.permission.SYSTEM_ALERT_WINDOW,Manifest.permission.GET_ACCOUNTS,Manifest.permission.WRITE_APN_SETTINGS};
                  ActivityCompat.requestPermissions(this,mPermissionList,123);
              }

其中123是requestcode,可以根据这个code判断,用户是否同意了授权。如果没有同意,可以根据回调进行相应处理:

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {

}

好了到这里就集成完了,虽然是复制复制的,但是还是有点小麻烦,集成时间大概十分钟左右

  1. 代码调用

初始化代码,Facebook有些特殊,不是在代码中配置,如下图所示,文档还乱了,不吐槽了,理解万岁;

new ShareAction(MainActivity.this)
                        .setPlatform(SHARE_MEDIA.QQ)//传入平台
                        .withText("hello")//分享内容
                        .setCallback(shareListener)//回调监听器
                        .share();

如上代码所示,其他的平台大同小异,只要换了传入的平台对象即可;

  1. 至此,分享代码已经完成了,U-Share,只能手动集成,没有当下最热的gradle自动加载的方式,不过相信未来肯定会加入的;其次就是配置有些繁琐了,想调通还是需要耗费一定的时间的;

下面我们来看下jar包的大小

umeng-common-1.5.4.jar(公共jar)

352k(比ShaerSDK小)

umeng-share-core-6.9.3.jar(Ushare所需)

umeng-sharetool-6.9.3.jar(Ushare所需)

282k(比ShareSDK大)

umeng-share-facebook-6.9.3.jar

510k(比ShareSDK大)

umeng-share-QQ-simplify-6.9.3.jar

78k(比ShareSDK大)

umeng-share-sina-simplify-6.9.3.jar

81k(比ShareSDK大)

umeng-share-wechat-simplify-6.9.3.jar

31k(比ShaerSDK小)

总大小:

1634k(比ShareSDK大)

 

  • ShareSDK集成

集成文档:http://wiki.mob.com/sdk-share-android-3-0-0/

ShareSDK采用的是gradle集成的方式,终于不用手动集成了,也不需要下载资源和jar包了,哈哈哈,让我先笑一会,好了我们继续;

  1. 按照文档在根目录下的build.gradle中配置mobsdk的加载,从jekins上加载,配置是非常简单的;

classpath "com.mob.sdk:MobSDK:2018.0319.1724"

之后在想要调用分享的模块中配置如下内容:

apply plugin: 'com.mob.sdk'
MobSDK {
    appKey "d580ad56b4b5"
    appSecret "7fcae59a62342e7e2759e9e397c82bdd"
    ShareSDK {
        //平台配置信息
        devInfo {
            SinaWeibo {
                appKey "568898243"
                appSecret "38a4f8204cc784f81f9f0daaf31e02e3"
                callbackUri "http://www.sharesdk.cn"
                shareByAppClient false
            }
            Wechat {
                appId "wx4868b35061f87885"
                appSecret "64020361b8ec4c99936c0e3999a9f249"
            }
            WechatMoments{
                appId "wx4868b35061f87885"
                appSecret "64020361b8ec4c99936c0e3999a9f249"
                bypassApproval true
            }
            QQ {
                appId "100371282"
                appKey "aed9b0303e3ed1e27bae87c33761161d"
                shareByAppClient true
            }
            QZone {
                appId "100371282"
                appKey "aed9b0303e3ed1e27bae87c33761161d"
                bypassApproval true
            }
            Facebook {
                appKey "1412473428822331"
                appSecret "a42f4f3f867dc947b9ed6020c2e93558"
                callbackUri "https://mob.com"
            }
        }
    }
}

如上所示,ShareSDK将微信的几个平台,还有QQ和QZone都分开处理了,这样需要更多的配置了,但是也就更灵活了,不需要的资源完全可以不需要加进来了,各有各的好处;

其次,上面的字段的说明,可以看ShareSDK的集成文档即可,里面都有说明;将自己的key申请好后,替换上面默认的即可,然后重新编译一下,就集成完成了,是的你没有听错,集成完了,不需要加任何jar包,不需要加任何act的配置,gradle的好处大大的体现出来了;

时间成本大大的减少了,并且在回调的配置方面减少了自己的配置上的操作失误,降低了错误的可能性,而且还不需要初始化哦,亲测可靠,下面我们开始调用代码分享吧;

  1. 调用代码
 Platform.ShareParams sp = new Platform.ShareParams();
                sp.setTitle("测试分享的标题");
                sp.setTitleUrl("http://sharesdk.cn"); // 标题的超链接
                sp.setText("测试分享的文本");
                sp.setImageUrl("http://www.someserver.com/测试图片网络地址.jpg");
                sp.setSite("发布分享的网站名称");
                sp.setSiteUrl("发布分享网站的地址");

                Platform qzone = ShareSDK.getPlatform (QZone.NAME);
// 设置分享事件回调(注:回调放在不能保证在主线程调用,不可以在里面直接处理UI操作)
                qzone.setPlatformActionListener (new PlatformActionListener() {
                    public void onError(Platform arg0, int arg1, Throwable arg2) {
                        //失败的回调,arg:平台对象,arg1:表示当前的动作,arg2:异常信息
                    }
                    public void onComplete(Platform arg0, int arg1, HashMap arg2) {
                        //分享成功的回调
                    }
                    public void onCancel(Platform arg0, int arg1) {
                        //取消分享的回调
                    }
                });
// 执行图文分享
                qzone.share(sp);

如上所示,代码调用完成,不同的平台更换不同的第三方对象即可,可以在快速集成文档中查看,然后就是分享类型,也可以在文档中查看《各平台分享内容说明》

  1. 至此,我们集成和调用代码就已经完成了,是不是Gradle的方式很简单呢,下面我们来对比下ShareSDK的前后包体增加大小:

785K

MobTools-2018.0911.1425.jar

MobCommons-2018.0918.1444.jar(公共jar)

464k(比Ushare大)

ShareSDK-Core-3.3.0.jar

120k(比Ushare小)

ShareSDK-QQ-3.3.0.jar

ShareSDK-QZone-3.3.0.jar

74k(比Ushare小)

ShareSDK-SinaWeibo-3.3.0.jar

70k(比Ushare小)

ShareSDK-Wechat-3.3.0.jar

ShareSDK-Wechat-Core-3.3.0.jar

ShareSDK-Wechat-Moments-3.3.0.jar

57k(比Ushare大)

ShareSDK-Facebook-3.3.0.jar

36k(比Ushare小)

总大小:

821k

 

  • 最终对比

对比项

Ushare

ShareSDK

集成时间

10min

2min

集成jar包的大小

1634k(fb的jar太大)

821k

集成方式

手动jar包集成

Gradle集成

配置项

配置的比较多(毕竟不是gradle集成)

配置项比较少,节省时间

客服(满分10分)

6分(无技术客服,并且回复比较慢)

9分(有技术客服,回复较快)

更新周期

平均三个月更新一次

平均一个多月更新一次

 

需要说明的是大小问题,虽然jar包对比差了一倍,但是U-share的fb的jar比较大,如果不集成fb的情况下,两者相差不多;

 

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 105
码字总数 92802
作品 0
金华
私信 提问
Web3.0 高速发展 站长应重视什么?

这是一篇在Web3.0趋势下,与站长们探讨如何维护和升级网站的文章。主要谈到了目前国内外互联网非常流行的社会化网络趋势问题,希 望能有一些普及意义。我们都知道Web2.0注重用户参与,但对于...

oschina
2012/06/25
2.9K
22
[信息图]2011年社会化媒体和电子商务全景图

投资银行Luma Partners制作的电子商务和社会化媒体网站以及服务提供商的logo合集图片,看看一个投资者角度是如何看待这个市场的。在社会化媒体行业,则有23个细分市场,他们分别是(点击图片...

小卒过河
2011/07/01
845
1
利用插件化技术调用ShareSDK减小应用体积

一 引言: ShareSDK是非常棒的移动社会化分享和评论工具,相信我们在开发应用过程中都离不开它。但是当我们集成ShareSDK时候同样会遇到一些问题。 1. ShareSDK包比较大,组合国内多家分享平台...

梁大帅
2015/03/30
0
2
第三方社会化评论系统评测

【历史回顾】 今天在蓝色看到了“友言、友荐”的合体广告,因为之前已经使用了友荐相关文章推荐插件,所以也好奇友言是怎么样一个产品。 友言、友荐同属jiathis旗下产品,友言定位于专业的社...

English0523
2015/10/08
0
0
JIRA 5 的新功能 - 企业级社会化协作

Atlassian 是一家专门为软件开发提供工具的公司。目前他们正在调试他们的新一代团队协作软件产品,JIRA。众所周知,JIRA是用来跟踪问题的。 JIRA 5 将提供的社会化功能包括,@支持,分享,和...

虫虫
2012/02/22
4.4K
9

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 哥们之间报恩的想法被上帝实现了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 小小编辑:推荐歌曲《消愁》 《消愁》- 毛不易 手机党少年们想听歌,请使劲儿戳(这里) @过遥 :周一的早上就应该用来补觉,太困了 周末不想...

小小编辑
41分钟前
73
6
MariaDB 服务器在 MySQL Workbench 备份数据的时候出错如何解决

服务器是运行在 MariaDB 10.2 上面的,在使用 MySQL Workbench 出现错误: mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"'......

honeymose
今天
3
0
apache顶级项目(二) - B~C

apache顶级项目(二) - B~C https://www.apache.org/ Bahir Apache Bahir provides extensions to multiple distributed analytic platforms, extending their reach with a diversity of s......

晨猫
今天
7
0
day152-2018-11-19-英语流利阅读

“超级食物”竟然是营销噱头? Daniel 2018-11-19 1.今日导读 近几年来,超级食物 superfoods 开始逐渐走红。不难发现,越来越多的轻食餐厅也在不断推出以超级食物为主打食材的健康料理,像是...

飞鱼说编程
今天
22
1
SpringBoot源码:启动过程分析(二)

接着上篇继续分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 一样的,我们先把时序图贴上来,方便理解: 二.源码分析 回顾一下,前面我们分析到了下...

Jacktanger
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部