Android 集成指南 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 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())10 11 12 13 14 15 // 分享内容的本地图片路径(为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 2-4 配置AndroidManifest.xml 1) 请在您项目的AndroidManifest.xml,添加了如下的所有权限: ? 1 2 3 4 5 6 7 8 这些权限将允许您的项目和ShareSDK 获取连接网络的权限、获取您的设备网络状态的 权限、实现https 安全连接的权限、读取手机设备状态的权限和保存必要配置的权限。 一般来说,即便不集成ShareSDK,大部分的项目也都会注册申请这些权限。 2)在application 下注册下面的Activity: ? 1 2 3 4 5 6 7 3)如果您的项目集成为微信和新浪微博,在application 下注册下面的Activity: ? 01 02 03 04 05 06 07 08 09 104)如果您的项目集微信,在application 下注册下面的Activity: ? 1 2 3 4 5 5)如果您使用ShareSDK 的快捷分享工具,在application 下注册下面的Activity: ? 01 02 03 04 05 06 07 08 09 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 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()此接口不需要WeiboActionListener,所以直接调用即可。ShareSDK都封装好第三方登录的方法了,非常方便调用,直接拷贝下面的方法,即可实现第三方登录。
1、微信登录方法
- (void)clickedWxLogin {
if ([ShareSDK hasAuthorized:SSDKPlatformTypeWechat]) {//判断是否授权
[ShareSDK cancelAuthorize:SSDKPlatformTypeWechat]//取消授权
}
WEAKSELF
[ShareSDK getUserInfo:SSDKPlatformTypeWechatonStateChanged:^(SSDKResponseStatestate,SSDKUser*user,NSError*error) {
weakSelf.wxButton.enabled=YES
if(state ==SSDKResponseStateSuccess&&user) {
NSLog(@"wx data : \n%@",user.rawData)
NSString*unionid = [user.rawDatatheValueForKey:@"unionid"]
if(!unionid || unionid.length==0) {
unionid = user.uid
}
[ShareSDK setCurrentUser:userforPlatformType:SSDKPlatformTypeWechat]
}
else{
NSLog(@"error : %@",error)
if([ShareSDKhasAuthorized:SSDKPlatformTypeWechat]) {
[ShareSDKcancelAuthorize:SSDKPlatformTypeWechat]
}
if(state ==SSDKResponseStateFail) {
[weakSelfshowHUDError:@"登录超时,请重新登录"]
}
}
}]
}
2、QQ登录方法
-(IBAction)qqLoginAction:(UIButton*)button {
if([ShareSDKhasAuthorized:SSDKPlatformTypeQQ]) {
[ShareSDKcancelAuthorize:SSDKPlatformTypeQQ]
}
WEAKSELF
[ShareSDK getUserInfo:SSDKPlatformTypeQQonStateChanged:^(SSDKResponseStatestate,SSDKUser*user,NSError*error) {
if(state ==SSDKResponseStateSuccess&&user) {
NSLog(@"qq data : \n%@",user.rawData)
[ShareSDK setCurrentUser:userforPlatformType:SSDKPlatformTypeQQ]
}]
}
else{
NSLog(@"error : %@",error)
if([ShareSDK hasAuthorized:SSDKPlatformTypeQQ]) {
[ShareSDK cancelAuthorize:SSDKPlatformTypeQQ]
}
if(state ==SSDKResponseStateFail) {
[weakSelf showHUDError:@"登录超时,请重新登录"]
}
}
}]
}
评论列表(0条)