| 关键词: nbsp TOKEN requestParams WBConstants CODE Overridepublic PARAMS constants String 代码 |
本文实例讲述了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");//获取codemWeiboAuth.authorize(new AuthListener(), WeiboAuth.OBTAIN_AUTH_CODE);// 第二步:通过 Code 获取 TokenfetchTokenAsync(mCode, WEIBO_DEMO_APP_SECRET);5.主要的核心代码如下:复制代码代码如下:/*** 微博认证授权回调类。*/class AuthListener implements WeiboAuthListener {@Overridepublic 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 获取 TokenfetchTokenAsync(mCode, WEIBO_DEMO_APP_SECRET);}@Overridepublic void onCancel() {Log.e("LoginActivity", "sinaAuth cancel");//如果取消授权,那么可以调到登录页面等}@Overridepublic 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() {@Overridepublic 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();@Overridepublic void onComplete4binary(ByteArrayOutputStream responseOS) {LogUtil.e(TAG, "onComplete4binary...");mHandler.obtainMessage(MSG_FETCH_TOKEN_FAILED).sendToTarget();}@Overridepublic void onIOException(IOException e) {LogUtil.e(TAG, "onIOException: " + e.getMessage());mHandler.obtainMessage(MSG_FETCH_TOKEN_FAILED).sendToTarget();}@Overridepublic 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; |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|