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;
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");
}
});
}
// 新浪微博认证监听
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 | 授权对话框回调接口。处理授权完成、授权失败、授权取消等事件 |
接口名称 | |
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对象 |
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 | 用于异步返回服务器的返回结果 |