Android新浪微博分享实现

来源:互联网 发布:刀剑封魔录网络 编辑:程序博客网 时间:2024/05/17 01:24
注册新浪开放平台的开发者账户,创建测试应用,得到应用的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 {@Overridepublic 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();}}}}@Overridepublic void onError(WeiboDialogError e) {Toast.makeText(hiWorld.getApplicationContext(),"Auth error : " + e.getMessage(), Toast.LENGTH_LONG).show();}@Overridepublic void onCancel() {Toast.makeText(hiWorld.getApplicationContext(), "Auth cancel",Toast.LENGTH_LONG).show();}@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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

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

原创粉丝点击