Android新浪微博分享实现

注册 新浪开放平台的开发者账户,创建测试应用,得到应用的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;
        // 新浪分享 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

授权对话框回调接口。处理授权完成、授权失败、授权取消等事件






获取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

用于异步返回服务器的返回结果

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值