Android集成新浪微博第三方登录的方法
本文实例讲述了Android集成新浪微博第三方登录的方法。分享给大家供大家参考。具体实现方法如下:
1.下载微博的sdk,导入微博的jar包两个android-support-v4.jar和weibosdkcore.jar两个包
2.把新浪微博中的demo_src中SDK中的com,导入到项目中
3.用demo中的constants,主要是参数设置,将里面的参数改成自己的参数。
4.编写代码,主要步骤如下:
//初始化微博对象 mWeiboAuth=newWeiboAuth(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(newAuthListener(),WeiboAuth.OBTAIN_AUTH_CODE); //第二步:通过Code获取Token fetchTokenAsync(mCode,WEIBO_DEMO_APP_SECRET);
5.主要的核心代码如下:
/** *微博认证授权回调类。 */ classAuthListenerimplementsWeiboAuthListener{
@Override publicvoidonComplete(Bundlevalues){ if(null==values){ //获取code失败 return; } Stringcode=values.getString("code"); if(TextUtils.isEmpty(code)){ //获取code失败 return; } //获取code成功 mCode=code; //获取code成功,第二步:通过Code获取Token fetchTokenAsync(mCode,WEIBO_DEMO_APP_SECRET); }
@Override publicvoidonCancel(){ Log.e("LoginActivity","sinaAuthcancel"); //如果取消授权,那么可以调到登录页面等 }
@Override publicvoidonWeiboException(WeiboExceptione){ Log.e("LoginActivity","sinaAuthexception:"+e.getMessage()); } }
/** *该Handler配合{@linkRequestListener}对应的回调来更新UI。 */ privateHandlermHandler=newHandler(){ publicvoidhandleMessage(Messagemsg){
switch(msg.what){ caseMSG_FETCH_TOKEN_SUCCESS: //显示Token //Stringdate=new //SimpleDateFormat("yyyy/MM/ddHH:mm:ss").format( //newjava.util.Date(mAccessToken.getExpiresTime())); //Stringformat= //getString(R.string.weibosdk_demo_token_to_string_format_1);
//获取tocken成功 break;
caseMSG_FETCH_TOKEN_FAILED: //Toast.makeText(WBAuthCodeActivity.this, //R.string.weibosdk_demo_toast_obtain_token_failed, //Toast.LENGTH_SHORT).show(); //获取tocken失败 break; default: break; } }; };
/** *异步获取Token。 * *@paramauthCode * 授权Code,该Code是一次性的,只能被获取一次Token *@paramappSecret * 应用程序的APP_SECRET,请务必妥善保管好自己的APP_SECRET, * 不要直接暴露在程序中,此处仅作为一个DEMO来演示。 */ publicvoidfetchTokenAsync(StringauthCode,StringappSecret){ /* *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); */ WeiboParametersrequestParams=newWeiboParameters(); 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);
/** *请注意:{@linkRequestListener}对应的回调是运行在后台线程中的,因此,需要使用Handler来配合更新 *UI。 */ AsyncWeiboRunner.request(OAUTH2_ACCESS_TOKEN_URL,requestParams, "POST",newRequestListener(){ @Override publicvoidonComplete(Stringresponse){ LogUtil.d(TAG,"gettokenResponse:"+response);
Oauth2AccessTokentoken=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 publicvoidonComplete4binary( ByteArrayOutputStreamresponseOS){ LogUtil.e(TAG,"onComplete4binary..."); mHandler.obtainMessage(MSG_FETCH_TOKEN_FAILED) .sendToTarget(); }
@Override publicvoidonIOException(IOExceptione){ LogUtil.e(TAG,"onIOException:"+e.getMessage()); mHandler.obtainMessage(MSG_FETCH_TOKEN_FAILED) .sendToTarget(); }
@Override publicvoidonError(WeiboExceptione){ LogUtil.e(TAG,"WeiboException:"+e.getMessage()); mHandler.obtainMessage(MSG_FETCH_TOKEN_FAILED) .sendToTarget(); } }); }