Android新浪微博分享实现
2016-12-18 20:57
309 查看
原创地址:http://blog.csdn.net/kafei_kings/article/details/8106783
注册新浪开放平台的开发者账户,创建测试应用,得到应用的AppKey和设定一个用来发布的官方地址下载示例,引入sdk,具体的方式开发文档中有详细说明。//需要引入的包
[java] view
plain copy
import com.weibo.sdk.android.Oauth2AccessToken;
import com.weibo.sdk.android.Weibo;
import com.weibo.sdk.android.WeiboAuthListener;
import com.weibo.sdk.android.WeiboDialogError;
import com.weibo.sdk.android.WeiboException;
import com.weibo.sdk.android.api.StatusesAPI;
import com.weibo.sdk.android.keep.AccessTokenKeeper;
import com.weibo.sdk.android.net.RequestListener;
[java] view
plain copy
private static HiWorld hiWorld = null;
// 新浪分享 file是路径
public static void shareSina(final String mContent, final String filePath) {
// public static void shareSina(String mContent, String filePath) {
hiWorld.runOnUiThread(new Runnable() {
public void run() {
Log.e("share sina", "okey enter share");
// if(filePath == null){
// filePath = "";
// }
Log.e("share sina mContent", "" + mContent.trim().toString()
+ "");
Log.e("share sina filePath", "" + filePath.trim().toString()
+ "");
hiWorld.mContent = mContent + System.currentTimeMillis();
hiWorld.filePath = filePath;
mWeibo = Weibo.getInstance(CONSUMER_KEY, REDIRECT_URL);
Log.e("weibo instance", mWeibo.toString());
mWeibo.authorize(hiWorld, hiWorld.new AuthDialogListener());
Log.e("weibo authorize", "okey ? weibo authorize");
}
});
}
[java] view
plain copy
// 新浪微博认证监听
class AuthDialogListener implements WeiboAuthListener {
@Override
public void onComplete(Bundle values) {
String token = values.getString("access_token");
String expires_in = values.getString("expires_in");
Log.e("AuthDialogListener", "onComplete token:" + token
+ ", expires_in:" + expires_in);
HiWorld.accessToken = new Oauth2AccessToken(token, expires_in);
if (HiWorld.accessToken.isSessionValid()) {
String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
.format(new java.util.Date(HiWorld.accessToken
.getExpiresTime()));
AccessTokenKeeper.keepAccessToken(HiWorld.this, accessToken);
Toast.makeText(HiWorld.this, "认证成功", Toast.LENGTH_SHORT).show();
// 发博分享
StatusesAPI api = new StatusesAPI(HiWorld.accessToken);
Log.e("weibo api", "okey ? weibo api");
// Log.e("accessToken.getToken()",accessToken.getToken());
if (!TextUtils.isEmpty(accessToken.getToken())) {
if (TextUtils.isEmpty(mContent)) {
Toast.makeText(hiWorld, "请输入内容!", Toast.LENGTH_LONG)
.show();
return;
}
if (!TextUtils.isEmpty(filePath)) {
api.upload(mContent, filePath, "", "",
hiWorld.new SinaWBUpdateListener());
Toast.makeText(hiWorld, "api访问请求已执行,请等待结果",
Toast.LENGTH_LONG).show();
hiWorld.finish();
} else {
// Just update a text weibo!
api.update(mContent, "", "",
hiWorld.new SinaWBUpdateListener());
Toast.makeText(hiWorld, "api访问请求已执行", Toast.LENGTH_LONG)
.show();
}
}
}
}
@Override
public void onError(WeiboDialogError e) {
Toast.makeText(hiWorld.getApplicationContext(),
"Auth error : " + e.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onCancel() {
Toast.makeText(hiWorld.getApplicationContext(), "Auth cancel",
Toast.LENGTH_LONG).show();
}
@Override
public void onWeiboException(WeiboException e) {
Toast.makeText(hiWorld.getApplicationContext(),
"Auth exception : " + e.getMessage(), Toast.LENGTH_LONG)
.show();
}
}
// 新浪微博更新监听
class SinaWBUpdateListener implements RequestListener {
public void onComplete(String response) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(HiWorld.this, R.string.weibosdk_send_sucess,
Toast.LENGTH_LONG).show();
}
});
finish();
}
public void onIOException(IOException e) {
}
public void onError(final WeiboException e) {
System.out.println(e);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(
HiWorld.this,
String.format(
HiWorld.this
.getString(R.string.weibosdk_send_failed)
+ ":%s", e.getMessage()),
Toast.LENGTH_LONG).show();
Log.e("e.getMessage()", e.getMessage()
+ " ,hiWorld.filePath:" + hiWorld.filePath);
}
});
}
}
参考的官方文档:
1. Weibo: 微博API 接口类,对外提供weiboapi的调用,包括登录,API调用,微博分享等功能。
2. Oauth2AccessToken:封装了“access_token”,“expires_in”,"refresh_token",并提供了
他们的管理功能
3. Utility:工具类,提供了url 的encode,decode方法。
4. AsyncWeiboRunner:微博api异步执行类,封装了回调接口,通过创建线程来调用Weibo中的接口方法。
5. HttpManager: 负责与服务器进行通讯的类,封装了GET、POST请求方式,并对外提供图片上传等功能
6. WeiboAPI: 该类及其子类封装了新浪微博对外提供的api接口方法。
7. WeiboException:微博异常封装类,封装了微博的各个异常。
8. SsoHandler:单点登录 认证类,对外提供了sso登录认证的方法。
授权认证
注册新浪开放平台的开发者账户,创建测试应用,得到应用的AppKey和设定一个用来发布的官方地址下载示例,引入sdk,具体的方式开发文档中有详细说明。//需要引入的包
[java] view
plain copy
import com.weibo.sdk.android.Oauth2AccessToken;
import com.weibo.sdk.android.Weibo;
import com.weibo.sdk.android.WeiboAuthListener;
import com.weibo.sdk.android.WeiboDialogError;
import com.weibo.sdk.android.WeiboException;
import com.weibo.sdk.android.api.StatusesAPI;
import com.weibo.sdk.android.keep.AccessTokenKeeper;
import com.weibo.sdk.android.net.RequestListener;
[java] view
plain copy
private static HiWorld hiWorld = null;
// 新浪分享 file是路径
public static void shareSina(final String mContent, final String filePath) {
// public static void shareSina(String mContent, String filePath) {
hiWorld.runOnUiThread(new Runnable() {
public void run() {
Log.e("share sina", "okey enter share");
// if(filePath == null){
// filePath = "";
// }
Log.e("share sina mContent", "" + mContent.trim().toString()
+ "");
Log.e("share sina filePath", "" + filePath.trim().toString()
+ "");
hiWorld.mContent = mContent + System.currentTimeMillis();
hiWorld.filePath = filePath;
mWeibo = Weibo.getInstance(CONSUMER_KEY, REDIRECT_URL);
Log.e("weibo instance", mWeibo.toString());
mWeibo.authorize(hiWorld, hiWorld.new AuthDialogListener());
Log.e("weibo authorize", "okey ? weibo authorize");
}
});
}
[java] view
plain copy
// 新浪微博认证监听
class AuthDialogListener implements WeiboAuthListener {
@Override
public void onComplete(Bundle values) {
String token = values.getString("access_token");
String expires_in = values.getString("expires_in");
Log.e("AuthDialogListener", "onComplete token:" + token
+ ", expires_in:" + expires_in);
HiWorld.accessToken = new Oauth2AccessToken(token, expires_in);
if (HiWorld.accessToken.isSessionValid()) {
String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
.format(new java.util.Date(HiWorld.accessToken
.getExpiresTime()));
AccessTokenKeeper.keepAccessToken(HiWorld.this, accessToken);
Toast.makeText(HiWorld.this, "认证成功", Toast.LENGTH_SHORT).show();
// 发博分享
StatusesAPI api = new StatusesAPI(HiWorld.accessToken);
Log.e("weibo api", "okey ? weibo api");
// Log.e("accessToken.getToken()",accessToken.getToken());
if (!TextUtils.isEmpty(accessToken.getToken())) {
if (TextUtils.isEmpty(mContent)) {
Toast.makeText(hiWorld, "请输入内容!", Toast.LENGTH_LONG)
.show();
return;
}
if (!TextUtils.isEmpty(filePath)) {
api.upload(mContent, filePath, "", "",
hiWorld.new SinaWBUpdateListener());
Toast.makeText(hiWorld, "api访问请求已执行,请等待结果",
Toast.LENGTH_LONG).show();
hiWorld.finish();
} else {
// Just update a text weibo!
api.update(mContent, "", "",
hiWorld.new SinaWBUpdateListener());
Toast.makeText(hiWorld, "api访问请求已执行", Toast.LENGTH_LONG)
.show();
}
}
}
}
@Override
public void onError(WeiboDialogError e) {
Toast.makeText(hiWorld.getApplicationContext(),
"Auth error : " + e.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onCancel() {
Toast.makeText(hiWorld.getApplicationContext(), "Auth cancel",
Toast.LENGTH_LONG).show();
}
@Override
public void onWeiboException(WeiboException e) {
Toast.makeText(hiWorld.getApplicationContext(),
"Auth exception : " + e.getMessage(), Toast.LENGTH_LONG)
.show();
}
}
// 新浪微博更新监听
class SinaWBUpdateListener implements RequestListener {
public void onComplete(String response) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(HiWorld.this, R.string.weibosdk_send_sucess,
Toast.LENGTH_LONG).show();
}
});
finish();
}
public void onIOException(IOException e) {
}
public void onError(final WeiboException e) {
System.out.println(e);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(
HiWorld.this,
String.format(
HiWorld.this
.getString(R.string.weibosdk_send_failed)
+ ":%s", e.getMessage()),
Toast.LENGTH_LONG).show();
Log.e("e.getMessage()", e.getMessage()
+ " ,hiWorld.filePath:" + hiWorld.filePath);
}
});
}
}
参考的官方文档:
1. Weibo: 微博API 接口类,对外提供weiboapi的调用,包括登录,API调用,微博分享等功能。
2. Oauth2AccessToken:封装了“access_token”,“expires_in”,"refresh_token",并提供了
他们的管理功能
3. Utility:工具类,提供了url 的encode,decode方法。
4. AsyncWeiboRunner:微博api异步执行类,封装了回调接口,通过创建线程来调用Weibo中的接口方法。
5. HttpManager: 负责与服务器进行通讯的类,封装了GET、POST请求方式,并对外提供图片上传等功能
6. WeiboAPI: 该类及其子类封装了新浪微博对外提供的api接口方法。
7. WeiboException:微博异常封装类,封装了微博的各个异常。
8. SsoHandler:单点登录 认证类,对外提供了sso登录认证的方法。
获取weibo对象 | |
接口名称 | |
com.weibo.sdk.Android.Weibo.getInstance(String appKey, String redirectUrl) | |
参数名称 | 作用 |
appKey | 第三方应用的appkey(在新浪微博开放平台上创建应用时自动分配), |
redirectUrl | 第三方应用的回调页 |
返回结果 | |
Weibo实例对象 |
授权认证
授权认证 | |
接口名称 | |
com.weibo.sdk.android.Weibo.authorize(Context context, WeiboAuthListenerlistener) | |
参数名称 | 作用 |
context | 当前activity对象,用于获取当前网络状态,弹出对话框等。 |
listener | 授权对话框回调接口。处理授权完成、授权失败、授权取消等事件 |
获取Oauth2AccessToken对象 | |
接口名称 | |
com.weibo.sdk.android. Oauth2AccessToken (String accessToken, String expires_in) | |
参数名称 | 作用 |
accessToken | 通过认证后从服务器获取到的访问令牌 |
expires_in | 认证有效期 |
返回结果 | |
Oauth2AccessToken实例对象 |
StatusesAPI 构造函数 | |
接口名称 | |
com.weibo.sdk.android.api.StatusesAPI(Oauth2AccessTokenaccesssToken) | |
参数名称 | 作用 |
accesssToken | Oauth2AccessToken对象 |
分享文字到微博 | |
接口名称 | |
com.weibo.sdk.android.api.StatusesAPI.update(String content, String lat, String lon, RequestListener listener) | |
参数名称 | 作用 |
content | 要分享的微博内容,限140个字 |
Lat、lon | 经纬度,格式为:ddd.ddddd °【度 . 度】格式 |
listener | 用于异步返回服务器的返回结果 |
分享文字和图片到微博 | |
接口名称 | |
com.weibo.sdk.android.api.StatusesAPI.upload(String content, String file, String lat, String lon, RequestListener listener) | |
参数名称 | 作用 |
content | 要分享的微博内容,限140个字 |
file | 要上传的照片本地所在路径 |
Lat、lon | 经纬度,格式为:ddd.ddddd °【度 . 度】格式 |
listener | 用于异步返回服务器的返回结果 |
SSOHandler构造函数 | |
接口名称 | |
void SSOHandler (Activity activity,Weibo weibo) | |
参数名称 | 作用 |
activity | 发起认证的Activity |
weibo | weibo对象 |
SSO回调 |
接口名称 |
void authorizeCallBack(int requestCode, int resultCode, Intent data) |
使用说明 |
在Authorize Activity里覆写onActivityResult(int requestCode, int resultCode, Intent data),在方法中使用SSOHandler对象调用authorizeCallBack(int requestCode, intresultCode, Intent data) |
SSO 认证 | |
接口名称 | |
void authorize (WeiboAuthListenerlistener weiboAuthListener) | |
使用说明 | |
发起sso认证时调用此方法 | |
参数名称 | 作用 |
weiboAuthListener | 用于异步返回服务器的返回结果 |
相关文章推荐
- 鸟人的Android揭秘(5)——搭建Android SDK开发环境(一)
- AndroidStudio如何添加悬浮提示
- Mina长连接框架实现Android客户端与服务器端通信
- Fragment生命周期
- 基于android7.0流程分析anr产生原因
- Android 性能优化之内存优化
- 如何取消android studio启动时自动打开上次关闭的项目
- Android中的裁剪中Region.Op参数的用法
- ListView设置setOnKeyListener后OnKey无法被调用的问题
- Android播放器菜单的显示隐藏动画效果
- android设计模式之状态模式
- Android开发——Chronometer计时器控件
- 安卓缓存指引
- 在android源码编译自己的模块
- Xutils学习,个人学习,不断添加内容
- 在Ubuntu Server14.04上编译Android6.0源码
- Android studio项目文件中出现“红J”问题解决办法
- 《第一行代码》学习笔记--Android入门(一、二、三)
- Android studio 引入So文件
- Android Studio 的插件利器