Android集成新浪微博第三方登录的方法
本文实例讲述了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的参数调用问题的参数
private static final int msg_fetch_token_success = 1;
private static final int msg_fetch_token_failed = 2;
希望本文所述对大家的android程序设计有所帮助。