Android实现QQ微博登录授权功能

Home / Android MrLee 2015-3-16 3374

公司的小项目,其中就有微博和QQ的用户登录,在这里记录一下,另外QQ的文档非常恶心,鄙视一个!

微博授权登录:

先去微博开放平台申请应用,Android应用的包名和签名填好,然后下载导入SDK。
(很多傻瓜教程上都有这些东西的注册流程,不过要是这些你都弄不好就别做开发了,微博的基本上看SDK里的文档和示例基本就没问题了)
直接上代码,其实很简单:
// /////////////////////////////////////////////////////////
  //
  // 微博登录相关操作
  //
  // /////////////////////////////////////////////////////////
  private WeiboAuth weiboAuth;
  private Oauth2AccessToken weiboAccessToken;
  private SsoHandler ssoHandler;
  private UsersAPI usersAPI;
  /**
   * 登录按钮事件,进入授权登录流程
   * 
   * @param view
   */
  public void onWeiboLogin(View view) {
    weiboAuth = new WeiboAuth(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE);
    // sso安全登录
    ssoHandler = new SsoHandler(this, weiboAuth);
    ssoHandler.authorize(new AuthListener());
  }
  /**
   * 授权登录监听
   * 
   * @author zhang.yue
   * @date 2014年12月1日
   */
  class AuthListener implements WeiboAuthListener {
    @Override
    public void onCancel() {
    }
    @Override
    public void onComplete(Bundle arg0) {
      // 获取到uid,token等信息
      weiboAccessToken = Oauth2AccessToken.parseAccessToken(arg0);
      if (weiboAccessToken.isSessionValid()) {
        // 登录成功,获取用户信息
        usersAPI = new UsersAPI(weiboAccessToken);
        long uid = Long.parseLong(weiboAccessToken.getUid());
        usersAPI.show(uid, requestListener);
      } else {
        // 登录失败
        System.out.println(arg0.get("code"));
      }
    }
    @Override
    public void onWeiboException(WeiboException arg0) {
    }
  }
  /**
   * 监听获取用户信息
   */
  RequestListener requestListener = new RequestListener() {
    @Override
    public void onWeiboException(WeiboException arg0) {
    }
    @Override
    public void onComplete(String arg0) {
      // 得到用户信息json
      System.out.println(arg0);
    }
  };

QQ授权登录:

同样的去QQ互联平台申请应用填资料,不过QQ的文档很恶心,先看代码,一会再说:
// /////////////////////////////////////////////////////////
  //
  // QQ登录相关操作 zhangyue 20141201
  //
  // /////////////////////////////////////////////////////////
  private Tencent tencent;
  /**
   * 登录按钮事件,进入授权登录流程
   * 
   * @param view
   */
  public void onQQLogin(View view) {
    tencent = Tencent.createInstance(Constants.QQ_APP_KEY, getApplicationContext());
    tencent.login(this, Constants.QQ_SCOPE, new BaseUiListener("login"));
  }
  /**
   * Ui类封装接口监听
   * @author zhang.yue
   * @date 2014年12月1日
   */
  class BaseUiListener implements IUiListener {
    private String scope;
    public BaseUiListener(String scope) {
      this.scope = scope;
    }
    @Override
    public void onCancel() {
    }
    @Override
    public void onError(UiError arg0) {
      System.err.println(arg0.errorCode);
    }
    @Override
    public void onComplete(Object arg0) {
      if (this.scope == "login") {
        //授权登录成功,获取到uid,token
        System.out.println(arg0);
        //获取用户信息
        UserInfo userinfo = new UserInfo(LoginMainActivity.this, tencent.getQQToken());
        userinfo.getUserInfo(new BaseUiListener("get_user_info"));
      } else if (this.scope.equals("get_user_info")) {
        //获得用户信息json格式
        System.out.println(arg0);
      }
    }
  }
在QQ的文档中,获取用户信息是这样写的:
/**
 * 获取用户信息
 */
private void onClickUserInfo() {
        mTencent.requestAsync(Constants.GRAPH_USER_INFO, null,
                    Constants.HTTP_GET, new BaseApiListener("get_user_info", false), null);
}
结果 Constants.GRAPH_USER_INFO这个根本没有,其实新的已经换成UserInfo类那种方式获取了。还是得把示例导入进来看看才知道。
另外,ActivityResult也要重写一下:
@Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (ssoHandler != null) {
      ssoHandler.authorizeCallBack(requestCode, resultCode, data);
    }
    if (tencent != null) {
      tencent.onActivityResult(requestCode, resultCode, data);
    }
  }
这样授权和用户信息就都拿到了,SDK版本微博是2.5,QQ是2.2。

本文链接:https://www.it72.com/1438.htm

推荐阅读
最新回复 (0)
返回