原创地址:http://blog.youkuaiyun.com/kafei_kings/article/details/8106783
注册新浪开放平台的开发者账户,创建测试应用,得到应用的AppKey和设定一个用来发布的官方地址下载示例,引入sdk,具体的方式开发文档中有详细说明。//需要引入的包
- 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;
-
- public static void shareSina(final String mContent, final String filePath) {
-
-
-
- hiWorld.runOnUiThread(new Runnable() {
- public void run() {
- Log.e("share sina", "okey enter share");
-
-
-
- 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");
-
- 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 {
-
- 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 | 用于异步返回服务器的返回结果 |