1 获取ShareSDK
为了集成ShareSDK,您首先需要到ShareSDK官方网站注册并且创建应用,获得ShareSDK的Appkey,然后到SDK的下载页面下载SDK的压缩包,解压以后可以得到下图的四个目录:
其中的Libs包含ShareSDK的类库,Src包含集成微信和新浪微博需要的回调,Res是开发者信息示例,而Sample则包含一个完整的操作演示。
Libs里具体包括三个文件夹,分别是ShareSDK的全局依赖库、ShareSDK当前支持的所有平台工具库和ShareSDK可视化UI的一些支持库。“全局依赖库”是集成ShareSDK的基础,ShareSDK的任何平台都依赖于这个库,而“ShareSDK-GUI”提供的是一个侧栏控件和一个快捷分享工具,以方便开发者更快速地集成ShareSDK。
2 快速集成
2-1 导入Libs
1) 将“Libs\Global-Dependences”下的jar包复制到您的libs目录下。
2) 从“Libs\Platforms”中选择您感兴趣的平台,比方说“新浪微博”、“QQ空间”、“腾讯微博”等,复制相应的压缩包您项目的libs目录下并解压,解压过程中如遇覆盖提示,请同意覆盖。
3) 如果您决定使用ShareSDK提供的快捷分享工具,请复制“Libs\ShareSDK-GUI”中复制“cn.sharesdk.onekeyshare.jar”到您项目中。
4) 如果您的开发环境不能自动加载ShareSDK的jar包到您的项目中,请修改您项目的构建路径,将上述jar包添加到您的项目中。下图以Eclipse为例,展示添加后的效果:
2-2 添加代码
1) 打开您项目的入口Activity,在其onCreate中插入下面的代码:
?
1 |
AbstractWeibo.initSDK(this); |
这行代码用于初始化ShareSDK,必须在程序启动之时调用。
2)使用下面的代码,调用ShareSDK快捷分享功能:
分享时Notification的图标
?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 |
Intent i = new Intent(this, ShareAllGird.class); // 分享时Notification的图标 i.putExtra("notif_icon", R.drawable.ic_launcher); // 分享时Notification的标题 i.putExtra("notif_title", getString(R.string.app_name)); // 分享内容的标题(仅部分平台需要此字段) i.putExtra("title", "ShareSDK Demo"); // 分享内容的文本 i.putExtra("text", "share at: " + System.currentTimeMillis()); // 分享内容的本地图片路径(为null或文件不存在表示不分享图片) i.putExtra("image", Environment.getExternalStorageDirectory () + "/ssdk.png"); // 分享内容的网络图片地址(仅部分平台需要此字段) i.putExtra("image_url", "http://sharesdk.cn/Public/Frontend/images/logo.png"); // 设置是否跳转内容编辑页面,true表示不跳转,不传递表示false(跳转) i.putExtra("silent", silent); startActivity(i); |
3) 如果您的项目中集成微信平台,请将“Sample/src/cn/sharesdk/demo”中的“wxapi”目录复制到您的项目主包下。
4) 如果您的项目中集成微博平台,请将“Sample/src”中的“com”目录复制到您的项目中。
2-3 添加开发者信息
ShareSDK使用统一的格式管理您在不同平台上注册的开发者信息。这些信息都存放在您项目的“assets/ShareSDKDevInfor.xml”中。请到“Res”中将ShareSDKDevInfor.xml复制到您项目的对应位置,打开文件,然后根据不同的平台的数据,如下面的例子所示,替换您在这个平台上的开发者信息:
?
1 2 3 4 5 6 7 |
<ShareSDK AppKey="填写您在ShareSDK上注册到的AppKey" /> <SinaWeibo SortId="新浪微博在您分享列表中的位置,整型,数值越大越靠后" AppKey="填写您在新浪微博上注册到的AppKey" AppSecret="填写您在新浪微博上注册到的 AppSecret" Id="自定义字段,您可以自行选择一个整型数据,用于您项目中对此平台的识别符" RedirectUrl="填写您在新浪微博上注册的RedirectUrl" /> |
2-4 配置AndroidManifest.xml
1) 请在您项目的AndroidManifest.xml,添加了如下的所有权限:
?
1 2 3 4 5 6 7 8 |
<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.WRITE_APN_SETTINGS" /> <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.SEND_SMS"/> |
这些权限将允许您的项目和ShareSDK获取连接网络的权限、获取您的设备网络状态的权限、实现https安全连接的权限、读取手机设备状态的权限和保存必要配置的权限。一般来说,即便不集成ShareSDK,大部分的项目也都会注册申请这些权限。
2)在application下注册下面的Activity:
?
1 2 3 4 5 6 7 |
<activity android:name="cn.sharesdk.framework.AuthorizeActivity" android:configChanges="keyboardHidden|orientation" android:screenOrientation="portrait" > <!-- NoTitle表示不显示授权页面的标题 boolean值,为true表示不显示,否则为显示,默认为显示 --> <!-- <meta-data android:name="NoTitle" android:value="true" /> --> </activity> |
3)如果您的项目集成为微信和新浪微博,在application下注册下面的Activity:
?
01 02 03 04 05 06 07 08 09 10 |
<activity android:name="cn.sharesdk.sina.weibo.SSOActivity" android:configChanges="keyboardHidden|orientation" android:screenOrientation="portrait" /> <activity android:name="cn.sharesdk.demo.wxapi.WXEntryActivity" android:exported="true" android:screenOrientation="portrait" /> |
4)如果您的项目集微信,在application下注册下面的Activity:
?
1 2 3 4 5 |
<activity android:name="cn.sharesdk.demo.wxapi.WXEntryActivity" android:exported="true" android:screenOrientation="portrait" /> |
5)如果您使用ShareSDK的快捷分享工具,在application下注册下面的Activity:
?
01 02 03 04 05 06 07 08 09 10 11 12 13 |
<activity android:name="cn.sharesdk.onekeyshare.ShareAllGird" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan|stateHidden" /> <activity android:name="cn.sharesdk.onekeyshare.SharePage" android:configChanges="keyboardHidden|orientation" android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden|adjustResize" /> |
2-5签名
对于ShareSDK的大部分平台,只要您将其jar包和依赖集成到您的项目以
后就可以开始进行工作了。但是对于微信的两个平台却不行。因为微信开放平台要求android的第三方开发者需要提供自己项目的信息和签名指纹数据。为了演示分享功能Sample包中携带了一个"demokey.keystore"的keystore文件,其密码是“123456”,如果您在调试SSDKDemo的时候集成了微信的平台,就需要使用这个keystore对apk进行签名,之后才能尝试微信的分享。
3 主要功能解释
ShareSDK使用同一的接口实现不同平台的同类操作,如:授权、分享、关注等等。因此开发者可以在不理会平台差异的情况下,简单使用一句代码完成不同平台的各种操作。
3-1 获取已集成的平台列表
下面的代码演示获取已经集成到您项目中的ShareSDK平台列表:
?
1 |
AbstractWeibo[] weiboList = AbstractWeibo.getWeiboList(context) |
返回的列表中平台的排列顺序依照您在ShareSDKDevInfor.xml中为其配置的SortId来定。
请注意,此方法在第一次调用的时候可能会比较耗时,因此不建议在主线程中调用。
3-2 通过名字获取指定平台实例
除了getWeiboList的方法可以获取到平台实例以外,如果您想单独获取某一个平台的实例,还可以利用下面的方法,若获取腾讯微博的实例:
?
1 |
AbstractWeibo weibo = AbstractWeibo.getWeibo(context, TencentWeibo.NAME); |
其中的,其中的TencentWeibo.NAME是腾讯微博平台的静态字段,每一个平台都有一个NAME的字段,表示其名字。
3-3 设置操作回调
不论利用ShareSDK进行何种操作,如果希望得到操作的结果,都必须为执行操作的平台设置WeiboActionListener的回调。下面的代码演示对腾讯微博绑定WeiboActionListener的方法:
?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 |
AbstractWeibo weibo = AbstractWeibo.getWeibo(context, TencentWeibo.NAME); weibo.setWeiboActionListener( new WeiboActionListener() { public void onError(AbstractWeibo weibo, int action, Throwable t) { // 操作失败的处理代码 } public void onComplete(AbstractWeibo weibo, int action, HashMap<String, Object> res) { // 操作成功的处理代码 } public void onCancel(AbstractWeibo weibo, int action) { // 操作取消的处理代码 } } ); |
3-4 授权
手动授权并不是必要的操作,但是ShareSDK提供手动的授权操作,如下面的代码演示新浪微博的授权操作:
?
1 2 3 |
AbstractWeibo weibo = AbstractWeibo.getWeibo(context, SinaWeibo.NAME); weibo.setWeiboActionListener(waListener); weibo.authorize(); |
授权结果将通过WeiboActionListener接口返回。
3-5 获取用户资料
下面的代码演示新浪微博获取资料的方法,其他的平台(微信除外)也支持类似的操作:
?
1 2 3 |
String account = "3189087725"; AbstractWeibo weibo = AbstractWeibo.getWeibo(context, SinaWeibo.NAME); weibo.setWeiboActionListener(waListener); weibo.showUser(account); |
其中account是准备获取资料的帐号,如果account为null,则表示获取授权账户自己的资料。
获取资料前ShareSDK会自行判断平台是否已经授权,若未授权,会自行执行授权操作。
3-6 分享
下面的代码演示通用的分享操作(QQ空间、印象笔记请参考另外更合适其平台特性的接口):
?
1 2 3 4 5 |
String text = “测试分享的文本”; String image = “/mnt/sdcard/测试分享的图片.jpg” ; AbstractWeibo weibo = AbstractWeibo.getWeibo(context, SinaWeibo.NAME); weibo.setWeiboActionListener(waListener); weibo.share(text, image); |
其中的text是分享的文本内容,image是分享图片的本地路径。
微信好友和微信朋友圈的分享,应该使用新的分享接口,具体操作可以参考Sample中的相关例子,下面的例子展示使用微信分享网页的方法:
?
1 2 3 4 5 6 7 8 |
AbstractWeibo weibo = AbstractWeibo.getWeibo(menu.getContext(), Wechat.NAME); weibo.setWeiboActionListener(this); String title = "这是标题"; String text = "这是文本内容"; String url = "http://sharesdk.cn"; String thumbUrl = "/mnt/sdcard/网页缩略图.jpg"; weibo.share(AbstractWeibo.SHARE_WEBPAGE, title, text, url, thumbUrl); |
其中的share(int, Object…)方法是新版本添加的分享接口,暂时支持微信两个平台的分享,但后续版本的分享功能会往这个方法迁移。
QQ空间调用下面的接口更适合其平台特性:
?
1 2 3 4 5 6 |
String title = “测试分享的标题” String text = “测试分享的文本”; String imageUrl = “[url]http://www.someserver.com/[/url]测试分享的图片.jpg” AbstractWeibo weibo = AbstractWeibo.getWeibo(context, QZone.NAME); weibo.setWeiboActionListener(waListener); weibo.share(title, null, null, text, imageUrl, "ShareSDK", "http://www.sharesdk.cn"); |
对于接口的详细解释,请参考QQ登录平台的add_share接口。
印象笔记的分享内容需要携带笔记标题,因此调用下面的接口更为合适:
?
1 2 3 4 5 6 |
String title = “测试分享的标题” String text = “测试分享的文本”; String image = “/mnt/sdcard/测试分享的图片.jpg” AbstractWeibo weibo = AbstractWeibo.getWeibo(context, Evernote.NAME); weibo.setWeiboActionListener(waListener); weibo.save(title, text, image); |
对于印象笔记,分享的share接口依然可用,但是更好的接口是save。
执行分享前ShareSDK会自行判断平台是否已经授权,若未授权,会自行执行授权操作。
信息和邮件分享功能使用send接口,具体例子如下:
?
1 2 3 4 5 6 7 |
String address = ”10086”; String title = “测试分享的标题” String text = “测试分享的文本”; String image = “/mnt/sdcard/测试分享的图片.jpg” AbstractWeibo weibo = AbstractWeibo.getWeibo(context, ShortMessage.NAME); weibo.setWeiboActionListener(waListener); ((ShortMessage) weibo).send(address, title, text); |
短信的分享只支持SMS分享,如果直接分享MMS,则分享结果无法获取。至于邮件,不管分享方式如何,都无法直接获取分享结果。
执行分享前ShareSDK会自行判断平台是否已经授权,若未授权,会自行执行授权操作。
3-7 关注指定用户
当前的ShareSDK已经实现了新浪微博和腾讯微博的关注功能,下面的代码演示腾讯微博的关注操作:
?
1 2 3 4 |
String account = "shareSDK"; AbstractWeibo weibo = AbstractWeibo.getWeibo( context,TencentWeibo.NAME); weibo.setWeiboActionListener(waListener); weibo.followFriend(account); |
执行关注前ShareSDK会自行判断平台是否已经授权,若未授权,会自行执
行授权操作。
3-8 获取平台数据库
ShareSDK将每一个平台的授权数据都缓存在SharedPreferences中,并且相互独立。如果你希望获取任何一个平台的授权数据,可以像下面这样子做:
?
1 2 3 4 |
AbstractWeibo weibo = AbstractWeibo.getWeibo(this, TencentWeibo.NAME); String accessToken = weibo.getDb().getToken(); String openId = weibo.getDb().get("openid"); // 接下来执行你要的操作 |
不同平台都会缓存access token等信息,可以通过getToken()或者setToken()进行操作。此外,开发者还可以通过直接get()某个字段的办法,获取其数据,如上面通过“openid”字段获取到腾讯微博的openId。
3-8 取消授权
下面的代码演示新浪微博取消授权的操作:
?
1 2 |
AbstractWeibo weibo = AbstractWeibo.getWeibo(context, SinaWeibo.NAME); weibo.removeAccount(); |