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();
}
});
}
主要是改写complete相应的方法即可。handler主要是通知界面做出改变
UIHandler的参数调用问题的参数
privatestaticfinalintMSG_FETCH_TOKEN_SUCCESS=1;
privatestaticfinalintMSG_FETCH_TOKEN_FAILED=2;
希望本文所述对大家的Android程序设计有所帮助。
相关文章
- android 置灰不可点击,Android Studio 运行按钮灰色的完美解决方法
- android 混淆规则作用,Android代码混淆详解
- android deeplink流程,Android Deeplink探究[通俗易懂]
- Android SDK下载和安装,以及部署「建议收藏」
- android activity singletask,Android Activity启动模式之singleTask实例详解
- android 定时器实例,Android定时器和Handler用法实例分析
- android短信验证码代码,Android短信验证码自动填写实现代码
- Beta 6 现已发布,Android Q 正式版即将面世!
- Android保存图片到相册(适配android 10以下及以上)
- 【Android 组件化】路由组件 ( 页面跳转参数依赖注入 )
- 【Android FFMPEG 开发】Android 中执行 FFMPEG 指令 ( 集成 mobile-ffmpeg 框架 | 完整代码示例 )
- 【Android UI】贝塞尔曲线 ④ ( 使用 android.graphics.Path 提供的 cubicTo 方法绘制三阶贝塞尔曲线示例 )
- 【错误记录】Android Studio 集成 ARoute 编译报错 ( 兼容 support 库和 androidx 库 | add ‘tools:replace=“android:appCo )
- Android视频播放器屏幕左侧边随手指上下滑动亮度调节变暗变亮原理实现详解手机开发
- android 集成百度地图详解手机开发
- android异步加载图片并缓存到本地实现方法
- android自定义Android菜单背景的代码
- android图库竖屏不显示statusbar的解决方法
- 浅析Android的MediaPlayer类