广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-04-25 21:46:36 次阅读 稿源:互联网
    广告

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

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告