第一步:使快速工具进行集成(查看视频教程)
进入ShareSDK解压目录,打开“Share SDK for Android”目录,可以找到“QuickIntegrater.jar”,这个就是快速集成ShareSDK的工具
Windows下
首先确定您已经安装了JDK,并且正确配置了JAVA_HOME和PATH系统变量,此时您可以双击QuickIntegrater启动程序

Linux/Mac OS下
同样需要先确保已经正确配置了JDK,之后启动终端,cd进入“Share SDK for Android”目录,输入: java -jar QuickIntegrater.jar 可启动QuickIntegrater

正确输入项目的名称和包名,勾选需要的集成的平台,然后点击“确定”。
QuickIntegrater会自行产生一个文件夹,复制此文件夹中所有文件到您的项目中覆盖即可。
第二步:配置AndroidManifest.xml(查看视频教程)
下面清单文件的配置是全部的,没有的平台就是不需要配置
1、添加权限
1
2
3
4
5
6
7
8
9
10
11
12
|
<
uses
-
permission
android
:
name
=
"android.permission.GET_TASKS"
/
>
<
uses
-
permission
android
:
name
=
"android.permission.INTERNET"
/
>
<
uses
-
permission
android
:
name
=
"android.permission.ACCESS_WIFI_STATE"
/
>
<
uses
-
permission
android
:
name
=
"android.permission.ACCESS_NETWORK_STATE"
/
>
<
uses
-
permission
android
:
name
=
"android.permission.CHANGE_WIFI_STATE"
/
>
<
uses
-
permission
android
:
name
=
"android.permission.WRITE_EXTERNAL_STORAGE"
/
>
<
uses
-
permission
android
:
name
=
"android.permission.READ_PHONE_STATE"
/
>
<
uses
-
permission
android
:
name
=
"android.permission.MANAGE_ACCOUNTS"
/
>
<
uses
-
permission
android
:
name
=
"android.permission.GET_ACCOUNTS"
/
>
<
!
--
蓝牙分享所需的权限
--
>
<
uses
-
permission
android
:
name
=
"android.permission.BLUETOOTH"
/
>
<
uses
-
permission
android
:
name
=
"android.permission.BLUETOOTH_ADMIN"
/
>
|
2、添加activity信息
(注意: tencent后面的appid要保持和您配置的QQ的appid一致)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<
activity
android
:
name
=
"com.mob.tools.MobUIShell"
android
:
theme
=
"@android:style/Theme.Translucent.NoTitleBar"
android
:
configChanges
=
"keyboardHidden|orientation|screenSize"
android
:
screenOrientation
=
"portrait"
android
:
windowSoftInputMode
=
"stateHidden|adjustResize"
>
<
intent
-
filter
>
<
data
android
:
scheme
=
"tencent100371282"
/
>
<
action
android
:
name
=
"android.intent.action.VIEW"
/
>
<
category
android
:
name
=
"android.intent.category.BROWSABLE"
/
>
<
category
android
:
name
=
"android.intent.category.DEFAULT"
/
>
<
/
intent
-
filter
>
<
/
activity
>
|
3、如果您集成了微信,易信,新浪微博支付宝还需要添加下面回调的activity处理;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<
!
--微信分享回调
--
>
<
activity
android
:
name
=
".wxapi.WXEntryActivity"
android
:
theme
=
"@android:style/Theme.Translucent.NoTitleBar"
android
:
configChanges
=
"keyboardHidden|orientation|screenSize"
android
:
exported
=
"true"
android
:
screenOrientation
=
"portrait"
/
>
<
!
--易信分享回调
--
>
<
activity
android
:
name
=
".yxapi.YXEntryActivity"
android
:
theme
=
"@android:style/Theme.Translucent.NoTitleBar"
android
:
configChanges
=
"keyboardHidden|orientation|screenSize"
android
:
exported
=
"true"
android
:
screenOrientation
=
"portrait"
/
>
<
!
--
调用新浪原生
SDK,需要注册的回调
activity
--
>
<
activity
android
:
name
=
"cn.sharesdk.sina.weibo.SinaActivity"
android
:
theme
=
"@android:style/Theme.Translucent.NoTitleBar"
>
<
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
=
".apshare.ShareEntryActivity"
android
:
theme
=
"@android:style/Theme.Translucent.NoTitleBar"
android
:
configChanges
=
"keyboardHidden|orientation|screenSize"
android
:
exported
=
"true"
/
>
|
4、替换mob后台申请的Appkey与各个平台申请的key

在您的代码中调用此方法,即可打开一键分享功能进行分享
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
private
void
showShare
(
)
{
ShareSDK
.
initSDK
(
this
)
;
OnekeyShare
oks
=
new
OnekeyShare
(
)
;
//关闭sso授权
oks
.
disableSSOWhenAuthorize
(
)
;
// 分享时Notification的图标和文字 2.5.9以后的版本不调用此方法
//oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
// title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
oks
.
setTitle
(
getString
(
R
.
string
.
share
)
)
;
// titleUrl是标题的网络链接,仅在人人网和QQ空间使用
oks
.
setTitleUrl
(
"http://sharesdk.cn"
)
;
// text是分享文本,所有平台都需要这个字段
oks
.
setText
(
"我是分享文本"
)
;
// imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
oks
.
setImagePath
(
"/sdcard/test.jpg"
)
;
//确保SDcard下面存在此张图片
// url仅在微信(包括好友和朋友圈)中使用
oks
.
setUrl
(
"http://sharesdk.cn"
)
;
// comment是我对这条分享的评论,仅在人人网和QQ空间使用
oks
.
setComment
(
"我是测试评论文本"
)
;
// site是分享此内容的网站名称,仅在QQ空间使用
oks
.
setSite
(
getString
(
R
.
string
.
app_name
)
)
;
// siteUrl是分享此内容的网站地址,仅在QQ空间使用
oks
.
setSiteUrl
(
"http://sharesdk.cn"
)
;
// 启动分享GUI
oks
.
show
(
this
)
;
}
|
运行效果如下:

编译并运行后,弹出类似上图的分享列表选择页面,点击后弹出分享窗口,点击发表后就成功发送到社交平台的话说明你已经基本集成成功了。但是,为了使您的用户有更好的分享体验,以及您的应用有更多的分享量,更好地在社交平台上传播,我们建议您按照详“进阶功能”的指引进行SSO(免登录)和更多社交平台的设置。
1、分享到指定平台
ShareSDK的分享功能由Platform的share(ShareParams params)方法完成上。下面分别使用新浪微博和QQ空间作为例子,举例如何利用此方法实现分享功能。
1)新浪微博
|
ShareParams
sp
=
new
ShareParams
(
)
;
sp
.
setText
(“测试分享的文本”
)
;
sp
.
setImagePath
(“
/
mnt
/
sdcard
/测试分享的图片
.
jpg”
)
;
Platform
weibo
=
ShareSDK
.
getPlatform
(
SinaWeibo
.
NAME
)
;
weibo
.
setPlatformActionListener
(
paListener
)
;
// 设置分享事件回调
// 执行图文分享
weibo
.
share
(
sp
)
;
|
2)QZone
1
2
3
4
5
6
7
8
9
10
11
12
|
ShareParams
sp
=
new
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
)
;
qzone
.
setPlatformActionListener
(
paListener
)
;
// 设置分享事件回调
// 执行图文分享
qzone
.
share
(
sp
)
;
|
ShareParams是Platform 的内部类,提供了ShareSDK实现分享的数据体,ShareParams内部是一个HashMap,对外通过setter/getter提供ShareSDK能支持的所有分享字段。由于不同平台所支持的分享字段并不一样,因此分享前弄清楚这些字段十分有必要。关于不同平台所能支持的分享字段的详细列表,请参考不同平台分享内容详细说明
执行分享前ShareSDK会自行判断平台是否已经授权,若未授权,会自行执行授权操作。
2、ShareParams字段释义
ShareSDK的每一个平台都有自己的ShareParams,由于平台差异,不同平台之间的ShareParams字段数量不一样,但是同样名称的字段都表示相同的含义,下面是当前ShareSDK所有平台ShareParams的字段的名称和代表的含义:
字段名称 | 描述 |
---|
text | 待分享的文本 |
imagePath | 待分享的本地图片。如果目标平台使用客户端分享,此路径不可以在/data/data下面 |
filePath | 待分享的文件路径。这个用在Dropbox和Wechat中 |
title | 分享内容的标题 |
notebook | 存放笔记的笔记本,如果不存在,会创建。一般用在印象笔记等“笔记类”平台中 |
stack | 印象笔记中的字段,用于归类笔记本 |
resource | 印象笔记中的字段,数组,暂时支持String类型和File类型的元素。如果想一次发送多个文本和图片,需要使用这个字段 |
tags | 标签,数组,部分平台支持为分享内容设置标签,可以使用这个字段 |
isPublic | 印象笔记和flickr的字段,表示是否公开 |
isFriend | flickr和VK的字段,表示是否公开给自己的朋友 |
isFamily | flickr的字段,表示是否公开给自己的家人 |
safetyLevel | flickr的字段,表示安全级别:1为安全级、2为辅导级、3为限制级 |
contentType | flickr的字段,表示相册类型:1为相片、2为屏幕截图、3为其他 |
hidden | flickr的字段,表示是否隐藏图片 |
venueName | foursquare的字段,表示分享位置的名称 |
venueDescription | foursquare的字段,表示分享位置的描述 |
latitude | 分享位置的维度 |
longitude | 分享位置的经度 |
imageUrl | 待分享的网络图片 |
comment | 对分享内容的评价。区别于text,评论一般共应用的用户自己填写,部分平台支持此字段 |
titleUrl | 分享内容标题的链接地址 |
url | 分享内容的url、在微信和易信中也使用为视频文件地址 |
address | 邮箱地址或者短信电话号码,一般在邮箱或者短信中使用 |
site | QQ空间的字段,标记分享应用的名称 |
siteUrl | QQ空间的字段,标记分享应用的网页地址 |
gropuId | VK的字段,表示图片所属的组ID。如果不设置此字段,ShareSDK会将组ID设置为ShareSDK所在的组 |
extInfo | Wecaht的字段,分享应用时,可以选择分享二进制文件或者脚本,此字段用来设置分享应用中的脚本 |
shareType | 微信和易信的字段,分享内容的类型: 分别为Platform.SHARE_TEXT(分享文本), Platform.SHARE_IMAGE(分享图片), Platform.SHARE_WEBPAGE(分享网页,既图文分享), Platform.SHARE_MUSIC(分享音频), Platform.SHARE_VIDEO(分享视频), Platform.SHARE_APPS(分享应用,仅微信支持), Platform.SHARE_FILE(分享文件,仅微信支持) Platform.SHARE_EMOJI(分享表情,仅微信支持) |
musicUrl | 微信和易信的字段,分享音频时的音频文件网络地址 |
imageData | 微信和易信的字段,各类分享内容中的图片bitmap对象,可以替代imagePatd或者imageUrl |
autdor | 有道云笔记的字段,表示分享内容的作者 |
customFlag | 自定义分享标签 |
上述字段中和本地路径有关的,全部使用“Path”结尾,如imagePath;和网络路劲有关的,使用“Url”结尾,如imageUrl。本地图片最好使用后缀名,否则POST文件时,可能无法正确计算文件的MIME值,从而导致发送失败。
3、新浪微博发送网络图片
新浪微博支持分享网络图片,但是这个需要高级微博写入权限,因此如果您需要分享网络图片,请申请权限以后,将图片Url设置给SinaWeibo.ShareParams.setImageUrl(imageUrl)即可。下面详细描述一下申请此权限的方法:
1)进入您的应用详情,并选择“接口管理”—“申请权限”。
2)在右侧展开的页面中展开“微博高级写入接口”,会看到“statuses/upload_url_text”。勾选分组左侧的复选框。
3)滚动页面到底部,填写申请理由,然后“提交申请”。

完成上述步骤已经,您的申请就会进入新浪微博的审核程序,一般3个工作日以后可以得到审核结果。当接口权限被审核通过,您的应用就具备发送网络图片的功能了
4、人人网和QQ空间发送网络图片
人人网和QQ空间已经支持分享本地图片功能,可以通过imagePath字段为其设置本地图片。不过这些平台都需要特定的权限才能分享本地图片,因此请确保您的应用已经申请了足够的权限。请注意:对于人人网和QQ空间来说,imageUrl存在的时候,原来的imagePath将被忽略,但是新浪微博刚好相反,故须要特别注意。
5、QQ客户端分享
QQ客户端分享,或者使用QQ客户端完成QQ空间的分享,如果想得到分享回调,需要在ShareSDKUIShell中配置如下的intent-filter:
注:2.6.2之前用intent的方式来配置QQ客户端回调的问题,2.6.3开始独立添加activity来处理QQ客户端的回调问题;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|adjustResize" >
<!--
如果集成QQ分享,或者使用QQ客户端来进行QQ空间的
分享,须要在此处添加一个对ACTION_VIEW事件的过滤器,
其中的scheme是“tencent”前缀再开发者应用的加上appId。
如果此过滤器不设置,则分享结束以后不能得到正确的回调
-->
<intent-filter>
<data android:scheme="tencent100371282" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<
!
--
QQ客户端回调
2.6.3开始独立添加
activity来处理
QQ客户端的回调
--
>
<
activity
android
:
name
=
"cn.sharesdk.tencent.qq.ResultReceiver"
android
:
launchMode
=
"singleTask"
android
:
noHistory
=
"true"
>
<
!
--
如果集成
QQ分享,或者使用
QQ客户端来进行
QQ空间的分享,须要在此处添加一个对
ACTION_VIEW
事件的过滤器,其中的
scheme是“
tencent”前缀再开发者应用的加上
appId。如果此过滤器不设置,
则分享结束以后不能得到正确的回调
--
>
<
intent
-
filter
android
:
priority
=
"1000"
>
<
data
android
:
scheme
=
"tencent100371282"
/
>
<
action
android
:
name
=
"android.intent.action.VIEW"
/
>
<
category
android
:
name
=
"android.intent.category.DEFAULT"
/
>
<
category
android
:
name
=
"android.intent.category.BROWSABLE"
/
>
<
/
intent
-
filter
>
<
/
activity
>
|
QQ客户端会在分享结束后通过这个filter的scheme回调您的应用,因此如果您没有注册这个filter,或者scheme写错了,甚至使用的是别人的appid,有可能导致没有回调、回调失败,甚至回调的时候突然弹出一个应用选择窗,让用户选择处理回调的应用。
6、微信的分享回调
微信和微信好友圈的分享要求在您的项目中注册它的一个回调Activity,并将回调Actiity添加到您的代码中。其操作如下:
1)打开AndroidManifest.xml,参考配置AndroidManifest.xml章节的说明,配置回调WXEntryActivity。
2)复制SDK解压目录下Src中的wxapi包到您的项目中。
7、使用印象笔记客户端完成分享
由于部分开发者要求印象笔记在目标设备已经安装了印象笔记客户端的时候,直接使用印象笔记客户端来分享,因此最新版本的ShareSDK已经提供了此项支持。开发者可以通过到印象笔记的应用信息中修改字段“ShareByAppClient”的值来实现:true,表示优先使用客户端分享。
不过ShareByAppClient只会印象分享方式,而不能影响授权方式,印象笔记暂无SSO功能,因此如果您使用印象笔记完成授权,依然会跳往Web授权方式。
8、绕开审核机制
微博、微信等平台的分享是需要先到目标平台上申请应用信息,通过审核了才能使用的。且不说审核可能会比较长久和繁杂,有时候可能因为目标平台的一些政策也可能导致您的应用长时间不能被审核通过。为了避免这个问题,ShareSDK提供了临时绕开目标平台审核机制的方法,可以在对统计数据有所损失的代价上提供分享功能。具体操作如下:
新浪微博
打开ShareSDK.xml,在新浪微博的应用信息里添加多一个字段“ShareByAppClient”,并设置其值为true。
设置了ShareByAppClient为true以后,ShareSDK会使用新浪微博的客户端来分享,支持传递图文进行分享,支持回流统计,但是不支持分享结果回调,也就是说,微博客户端被打开,即当作分享成功。
微信诸平台
微信和微信朋友圈(不包括微信搜藏)也可以绕开审核机制。方法是打开ShareSDK.xml,在微信或者和微信朋友圈的应用信息里添加多一个字段“BypassApproval”,并设置其值为true。
设置了BypassApproval为true以后,ShareSDK会使用微信的客户端来分享,支持传递图文进行分享,支持回流统计,但是不支持分享结果回调,也就是说,微信客户端被打开,即当作分享成功。
其他平台
ShareSDK在最新版本中已经提供了自定义平台的功能,并在我们的Sample中携带了一个使用自定义平台的方法集成来往分享的例子,这个例子和微博、微信绕开审核制度的方法本质上是一样的。
最后说一下,绕开审核制度来进行分享是在审核未通过之前的权宜之计,ShareSDK不建议开发者长时间使用这种方式进行分享,这一方面对统计数据无益,另一方面一旦目标平台客户端发生变动,可能就无法分享。因此一旦您的应用通过了审核,请尽快切换回常规的分享方式。
9、常见问题
分享时需要注意一些常见的问题:绝大部分的微博平台:如新浪微博、腾讯微博、网易微博等都是不支持短时间内重复分享相同文本内容的。因此如果分享的文本重复,会有错误返回。
此外,大部分平台分享时可以@此平台上的其他用户,但不同平台关注时需要提供的字段和权限并不一样。比如新浪微博@其他人时提供的account是其screen_name(即显示出来的名称),腾讯微博提供的是用户名,twitter和facebook都使用uid,但facebook需要在uid前后加中括号(如:uid是“123”,则@他人时提供的是“[123]”)。而且facebook比较麻烦,还需要申请权限,否则@操作无效。