Android 接入第三方登入qq

今天试试第三方登入,一般的第三方登入都使用友盟,今天试了试QQ自己的

1.在qq互联上申请api

2.准备工作好了,就开始敲代码了,将包导入自己项目

3.在AndroidMainifest上,加入qq所需要的权限,和activity

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<activity
    android:name="com.tencent.tauth.AuthActivity"
    android:noHistory="true"
    android:launchMode="singleTask" >
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="自己appkey" />
    </intent-filter>
</activity>
<activity
    android:name="com.tencent.connect.common.AssistActivity"
    android:configChanges="orientation|keyboardHidden"
    android:screenOrientation="behind"

    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

4.开始写代码了,初始化对象

public void login()
{
    mTencent = Tencent.createInstance("appkey", LoginActivity.this);
    if (!mTencent.isSessionValid())
    {
        mTencent.login(this, "all", loginListener,true);
    }
}

qq的回调

IUiListener loginListener = new BaseUiListener() {
    @Override
    protected void doComplete(JSONObject values) {
        Log.d("SDKQQAgentPref", "AuthorSwitch_SDK:" + SystemClock.elapsedRealtime());
        initOpenidAndToken(values);
        updateUserInfo();
    }
};
public static void initOpenidAndToken(JSONObject jsonObject) {
    try {
        String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);
        String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);
        String openId = jsonObject.getString(Constants.PARAM_OPEN_ID);
        if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)
                && !TextUtils.isEmpty(openId)) {
            mTencent.setAccessToken(token, expires);
            mTencent.setOpenId(openId);
        }
    } catch(Exception e) {
    }
}
private class BaseUiListener implements IUiListener {

    @Override
    public void onComplete(Object response) {
        if (null == response) {
            Util.showResultDialog(LoginActivity.this, "返回为空", "登录失败");
            return;
        }
        JSONObject jsonResponse = (JSONObject) response;
        if (null != jsonResponse && jsonResponse.length() == 0) {
            Util.showResultDialog(LoginActivity.this, "返回为空", "登录失败");
            return;
        }
        Util.showResultDialog(LoginActivity.this, response.toString(), "登录成功");
        // 有奖分享处理
      //  handlePrizeShare();
        doComplete((JSONObject)response);
    }
    protected void doComplete(JSONObject values) {

    }

    @Override

    public void onError(UiError e) {

    }

    @Override

    public void onCancel() {

    }

}
public static void initOpenidAndToken(JSONObject jsonObject) {
    try {
        String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);
        String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);
        String openId = jsonObject.getString(Constants.PARAM_OPEN_ID);
        if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)
                && !TextUtils.isEmpty(openId)) {
            mTencent.setAccessToken(token, expires);
            mTencent.setOpenId(openId);
        }
    } catch(Exception e) {
    }
}
Handler mHandler = new Handler() {

    @Override
    public void handleMessage(Message msg) {
        if (msg.what == 0) {
            JSONObject response = (JSONObject) msg.obj;
            if (response.has("nickname")) {
                try {
                 showToast(response.getString("nickname"));

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }else if(msg.what == 1){
            Bitmap bitmap = (Bitmap)msg.obj;
            
        }
    }

};
private void updateUserInfo() {
    if (mTencent != null && mTencent.isSessionValid()) {
        IUiListener listener = new IUiListener() {

            @Override
            public void onError(UiError e) {

            }

            @Override
            public void onComplete(final Object response) {
                Message msg = new Message();
                msg.obj = response;
                msg.what = 0;
                mHandler.sendMessage(msg);
                new Thread(){

                    @Override
                    public void run() {
                        JSONObject json = (JSONObject)response;
                        if(json.has("figureurl")){
                            Bitmap bitmap = null;
                            try {
                                bitmap = Util.getbitmap(json.getString("figureurl_qq_2"));
                            } catch (JSONException e) {

                            }
                            Message msg = new Message();
                            msg.obj = bitmap;
                            msg.what = 1;
                            mHandler.sendMessage(msg);
                        }
                    }

                }.start();
            }

            @Override
            public void onCancel() {

            }
        };
        mInfo = new UserInfo(this, mTencent.getQQToken());
        mInfo.getUserInfo(listener);

    } else {

    }
}

重要的是
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Tencent.onActivityResultData(requestCode,resultCode,data,loginListener);
}

猜你喜欢

转载自blog.csdn.net/qq_30711091/article/details/81246753