Android实现QQ登录

tech2022-11-30  103

1:进入QQ官网搭建环境 https://wiki.connect.qq.com/qq%E7%99%BB%E5%BD%95

2:点击登录按钮拉取QQ

mTencent = Tencent.createInstance("官网创建项目的id", LoginActivity.this); case R.id.img_qq://QQ登录 if (!mTencent.isSessionValid()) { mTencent.login(LoginActivity.this, "all", new TecentLoginListener()); } break;

3:QQ登录监听

//qq登录时的监听 class TecentLoginListener implements IUiListener { @Override public void onComplete(Object o) { //登录成功时的回调,这里的o是登录授权成功以后返回的数据 Log.v(TAG, "qq登录授权成功"); JSONObject object = (JSONObject) o; try { //需要从返回的数据中取出openid和expires_in还有access_token mOpenId = object.getString("openid"); String access_token = (String) object.get("access_token"); String expires_in = object.getString("expires_in"); mTencent.setOpenId(mOpenId);//将获取到的数据赋值给Tencent实例才可以继续回去用户的数据,否则只会无法回去用户的数据 mTencent.setAccessToken(access_token, expires_in); getUnionId(); //UserInfo 是用来存储用户数据的,参数为context,Tencent的QQtooken UserInfo userInfo = new UserInfo(LoginActivity.this, mTencent.getQQToken()); userInfo.getUserInfo(new IUiListener() { @Override public void onComplete(Object o) {//o就是所登录用户的数据 JSONObject jsonObject = (JSONObject) o; try { mName = (String) jsonObject.get("nickname"); mFigureurl = (String) jsonObject.get("figureurl_qq_2"); //登录成功的用户信息,可以进行一些想要的操作比如将用户数据上传接口等 Log.v(TAG, "-----qqloginseccess---mName==" + mName + "----mFigureurl==" + mFigureurl); } catch (JSONException e) { e.printStackTrace(); } } @Override public void onError(UiError uiError) {//登录出现错误时的回调 Log.v(TAG, ""); } @Override public void onCancel() {//取消登录时的回调 } }); } catch (JSONException e) { e.printStackTrace(); Log.v(TAG, "TecentLoginListener e" + e.getMessage()); } } @Override public void onError(UiError uiError) { Log.v(TAG, "TecentLoginListener onError" + uiError.errorCode); } @Override public void onCancel() { Log.v(TAG, "TecentLoginListener onCancel"); } }

获取UnionId

private void getUnionId() { if (mTencent != null && mTencent.isSessionValid()) { IUiListener listener = new IUiListener() { @Override public void onError(UiError e) { Log.v(TAG, "getUnionId onError"); } @Override public void onComplete(final Object response) { Log.v(TAG, "getUnionId onError"); if (response != null) { JSONObject jsonObject = (JSONObject) response; try { mUnionid = jsonObject.getString("unionid"); if (!TextUtils.isEmpty(mUnionid)) { Log.v(TAG, "--unionid==" + mUnionid); } } catch (Exception e) { Log.v(TAG, "getUnionId no unionid"); } } else { Log.v(TAG, "getUnionId no unionid"); } } @Override public void onCancel() { Log.v(TAG, "getUnionId onCancel"); } }; UnionInfo unionInfo = new UnionInfo(this, mTencent.getQQToken()); unionInfo.getUnionId(listener); } else { Log.v(TAG, "getUnionId please login frist!"); } }

最后不要忘记加

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Tencent.onActivityResultData(requestCode, resultCode, data, new TecentLoginListener()); }

微信登录请查看微信登录

最新回复(0)