欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android集成新浪微博第三方登录的方法

程序员文章站 2022-07-03 18:55:31
本文实例讲述了android集成新浪微博第三方登录的方法。分享给大家供大家参考。具体实现方法如下: 1.下载微博的sdk ,导入微博的jar包两个 android-sup...

本文实例讲述了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程序设计有所帮助。