Android集成新浪微博第三方登录的方法
Android集成新浪微博第三方登录的方法
发布时间:2016-12-28 来源:查字典编辑
摘要:本文实例讲述了Android集成新浪微博第三方登录的方法。分享给大家供大家参考。具体实现方法如下:1.下载微博的sdk,导入微博的jar包两...

本文实例讲述了Android集成新浪微博第三方登录的方法。分享给大家供大家参考。具体实现方法如下:

1.下载微博的sdk ,导入微博的jar包两个 android-support-v4.jar和weibosdkcore.jar两个包

2.把新浪微博中的demo_src中SDK中的com,导入到项目中

3.用demo中的constants,主要是参数设置,将里面的参数改成自己的参数。

4.编写代码,主要步骤如下:

复制代码 代码如下:// 初始化微博对象

mWeiboAuth = new WeiboAuth(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE);

// sinaAuthorWebView.loadUrl("https://open.weibo.cn/oauth2/authorize?scope=email&redirect_uri=http://www.sina.com&state=flashmemoAndroid&forcelogin=true&display=mobile&client_id=2529326755");

//获取code

mWeiboAuth.authorize(new AuthListener(), WeiboAuth.OBTAIN_AUTH_CODE);

// 第二步:通过 Code 获取 Token

fetchTokenAsync(mCode, WEIBO_DEMO_APP_SECRET);

5.主要的核心代码如下:

复制代码 代码如下:/**

* 微博认证授权回调类。

*/

class AuthListener implements WeiboAuthListener {

@Override

public void onComplete(Bundle values) {

if (null == values) {

// 获取code失败

return;

}

String code = values.getString("code");

if (TextUtils.isEmpty(code)) {

// 获取code失败

return;

}

// 获取code成功

mCode = code;

// 获取code成功,第二步:通过 Code 获取 Token

fetchTokenAsync(mCode, WEIBO_DEMO_APP_SECRET);

}

@Override

public void onCancel() {

Log.e("LoginActivity", "sinaAuth cancel");

//如果取消授权,那么可以调到登录页面等

}

@Override

public void onWeiboException(WeiboException e) {

Log.e("LoginActivity", "sinaAuth exception :" + e.getMessage());

}

}

/**

* 该 Handler 配合 {@link RequestListener} 对应的回调来更新 UI。

*/

private Handler mHandler = new Handler() {

public void handleMessage(Message msg) {

switch (msg.what) {

case MSG_FETCH_TOKEN_SUCCESS:

// 显示 Token

// String date = new

// SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(

// new java.util.Date(mAccessToken.getExpiresTime()));

// String format =

// getString(R.string.weibosdk_demo_token_to_string_format_1);

// 获取tocken成功

break;

case MSG_FETCH_TOKEN_FAILED:

// Toast.makeText(WBAuthCodeActivity.this,

// R.string.weibosdk_demo_toast_obtain_token_failed,

// Toast.LENGTH_SHORT).show();

// 获取tocken失败

break;

default:

break;

}

};

};

/**

* 异步获取 Token。

*

* @param authCode

* 授权 Code,该 Code 是一次性的,只能被获取一次 Token

* @param appSecret

* 应用程序的 APP_SECRET,请务必妥善保管好自己的 APP_SECRET,

* 不要直接暴露在程序中,此处仅作为一个DEMO来演示。

*/

public void fetchTokenAsync(String authCode, String appSecret) {

/*

* LinkedHashMap<String, String> requestParams = new

* LinkedHashMap<String, String>();

* requestParams.put(WBConstants.AUTH_PARAMS_CLIENT_ID,

* Constants.APP_KEY);

* requestParams.put(WBConstants.AUTH_PARAMS_CLIENT_SECRET,

* appSecretConstantS.APP_SECRET);

* requestParams.put(WBConstants.AUTH_PARAMS_GRANT_TYPE,

* "authorization_code");

* requestParams.put(WBConstants.AUTH_PARAMS_CODE, authCode);

* requestParams.put(WBConstants.AUTH_PARAMS_REDIRECT_URL,

* Constants.REDIRECT_URL);

*/

WeiboParameters requestParams = new WeiboParameters();

requestParams.add(WBConstants.AUTH_PARAMS_CLIENT_ID, Constants.APP_KEY);

requestParams.add(WBConstants.AUTH_PARAMS_CLIENT_SECRET, appSecret);

requestParams.add(WBConstants.AUTH_PARAMS_GRANT_TYPE,

"authorization_code");

requestParams.add(WBConstants.AUTH_PARAMS_CODE, authCode);

requestParams.add(WBConstants.AUTH_PARAMS_REDIRECT_URL,

Constants.REDIRECT_URL);

/**

* 请注意: {@link RequestListener} 对应的回调是运行在后台线程中的, 因此,需要使用 Handler 来配合更新

* UI。

*/

AsyncWeiboRunner.request(OAUTH2_ACCESS_TOKEN_URL, requestParams,

"POST", new RequestListener() {

@Override

public void onComplete(String response) {

LogUtil.d(TAG, "get token Response: " + response);

Oauth2AccessToken token = Oauth2AccessToken

.parseAccessToken(response);

if (token != null && token.isSessionValid()) {

LogUtil.d(TAG, "Success! " + token.toString());

mAccessToken = token;

// 获取token成功,可以做出相应的处理

// 通知UI改变

mHandler.obtainMessage(MSG_FETCH_TOKEN_SUCCESS)

.sendToTarget();

@Override

public void onComplete4binary(

ByteArrayOutputStream responseOS) {

LogUtil.e(TAG, "onComplete4binary...");

mHandler.obtainMessage(MSG_FETCH_TOKEN_FAILED)

.sendToTarget();

}

@Override

public void onIOException(IOException e) {

LogUtil.e(TAG, "onIOException: " + e.getMessage());

mHandler.obtainMessage(MSG_FETCH_TOKEN_FAILED)

.sendToTarget();

}

@Override

public void onError(WeiboException e) {

LogUtil.e(TAG, "WeiboException: " + e.getMessage());

mHandler.obtainMessage(MSG_FETCH_TOKEN_FAILED)

.sendToTarget();

}

});

}

主要是改写complete相应的方法即可。handler主要是通知界面做出改变

UI Handler的参数调用问题的参数

复制代码 代码如下:/** 获取 Token 成功或失败的消息 */

private static final int MSG_FETCH_TOKEN_SUCCESS = 1;

private static final int MSG_FETCH_TOKEN_FAILED = 2;

希望本文所述对大家的Android程序设计有所帮助。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新安卓软件开发学习
热门安卓软件开发学习
编程开发子分类