QQ第三方登錄--個(gè)人筆記

qq登錄有很多方式,在這里做一個(gè)筆記記錄一下qq的第三方登錄,并且獲取到個(gè)人信息
首先在騰訊的開(kāi)發(fā)者平臺(tái)注冊(cè)開(kāi)發(fā)者賬號(hào),網(wǎng)上有的說(shuō)是qq互聯(lián),我這里用的是騰訊的開(kāi)發(fā)者平臺(tái)注冊(cè)的一個(gè)測(cè)試的demo鏈接
騰訊開(kāi)發(fā)平臺(tái)


這里獲取到了appkey 和 appid,之后要用到
新建一個(gè)工程,下載qq登錄的sdk,并導(dǎo)入相應(yīng)的jar包。
下載地址
SDK下載地址
按照網(wǎng)站里面的相關(guān)操作,完成基本的配置,我用的是android studio,有點(diǎn)不一樣。
創(chuàng)建一個(gè)工程,并把open-sdk.jar文件和mta_sdk_x.x.x.jar文件拷貝到libs(或lib)目錄下,如下圖所示:

點(diǎn)擊右鍵將jar包同步到工程
添加權(quán)限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

添加Activity到application

<application>
 <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="tencent你的AppId" />
    </intent-filter>
 </activity>
<application>

上面的APPId記得改寫成自己的Appid,在開(kāi)發(fā)者平臺(tái)申請(qǐng)到的appid
tencent不能刪,只是改寫后面的“你的AppId”。
在解壓之后的sdk里面,有一個(gè)AppConstants接口,把它考入到自己的工程路面,也可以自己寫,這里主要就是用到appid的時(shí)候調(diào)用一下而已,自己寫如下:

package com.example.yukun.webapplication;

public class AppConstants {
// APP_ID 替換為你的應(yīng)用從官方網(wǎng)站申請(qǐng)到的合法appId
//public static final String APP_ID = "wxd930ea5d5a258f4f";

public static final String APP_ID="1105698282";
//申請(qǐng)的開(kāi)發(fā)appid
public static final String WX_APP_ID = "wx8e8dc60535c9cd93";

public static final String WX_ACTION = "action";

public static final String WX_ACTION_INVITE = "invite";

public static final String WX_RESULT_CODE = "ret";

public static final String WX_RESULT_MSG = "msg";

public static final String WX_RESULT = "result";

public static class ShowMsgActivity {
    public static final String STitle = "showmsg_title";
    public static final String SMessage = "showmsg_message";
    public static final String BAThumbData = "showmsg_thumb_data";
    
}
}

記得修改上面的appid。改為自己的id其他的不用管
下面的MainActivity的代碼,這里獲取到授權(quán),并且獲取到個(gè)人信息,布局很簡(jiǎn)單,就是兩個(gè)按鈕,一個(gè)imageview顯示圖片,用的是glide下載的圖片,獲取到的是頭像的uri,自己可以處理。

package com.example.yukun.webapplication;

import android.content.Intent;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.tencent.connect.UserInfo;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;

import org.json.JSONException;
import org.json.JSONObject;

public class QQLoginActivity extends AppCompatActivity {

private TextView textView;
private Tencent mTencent;
private String TAG="QQLoginActivity";
private ImageView imageView;
private Button button;
private Button button1;
private IUiListener getQQinfoListener;
private TextView textView_name;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login_qq);
    init();
}

private void init() {

    textView_name = (TextView) findViewById(R.id.text_name);
    textView = (TextView) findViewById(R.id.text);
    imageView = (ImageView) findViewById(R.id.image_head);
    button = (Button) findViewById(R.id.btn);
    button1 = (Button) findViewById(R.id.btn_user);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            LoginQQ();
        }

    });
    //按鈕,獲取個(gè)人信息
    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            User();
        }
    });
}



private void LoginQQ() {
    //這里的APP_ID請(qǐng)換成你應(yīng)用申請(qǐng)的APP_ID,我這里使用的是DEMO中官方提供的測(cè)試APP_ID 222222
    String mAppid = AppConstants.APP_ID; //這里就是我們之前寫的那個(gè)接口,或者拷貝進(jìn)來(lái)的,就是為了獲取appid
    mTencent = Tencent.createInstance(mAppid,this);

    if (!mTencent.isSessionValid()){
        mTencent.login(QQLoginActivity.this,"all", new BaseUiListener());
    }
}


private class BaseUiListener implements IUiListener {
    public void onCancel() {
        // TODO Auto-generated method stub

    }
    public void onComplete(Object response) {
        // TODO Auto-generated method stub
        Toast.makeText(getApplicationContext(), "登錄成功", Toast.LENGTH_LONG).show();
        Log.i(TAG,response.toString());
        try {
            //獲得的數(shù)據(jù)是JSON格式的,獲得你想獲得的內(nèi)容
            //如果你不知道你能獲得什么,看一下下面的LOG

            Log.e(TAG, "-------"+response.toString());
            String openidString = ((JSONObject) response).getString("openid");
            //顯示獲取到的openid
            textView.setText(openidString);

            //絕對(duì)不要能忘記,網(wǎng)上的很多沒(méi)有這個(gè)兩句,我試了很久就是沒(méi)成功,后來(lái)發(fā)現(xiàn)添加上了這兩句,獲取個(gè)人信息的時(shí)候才不會(huì)報(bào)openid為空
            mTencent.setOpenId(openidString);
            mTencent.setAccessToken(((JSONObject) response).getString("access_token"),((JSONObject) response).getString("expires_in"));

        } catch (JSONException e) {
            Log.i(TAG+"---",e.toString());
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public void onError(UiError arg0) {
        // TODO Auto-generated method stub
        Log.e(TAG, "-111113"+":"+arg0);
    }

}

//這里獲取到個(gè)人信息
private void User() {
    if(mTencent!=null){
        UserInfo qqInfo = new UserInfo(QQLoginActivity.this,mTencent.getQQToken());
        qqInfo.getUserInfo(  new IUiListener() {
            @Override
            public void onError(UiError arg0) {
                // TODO Auto-generated method stub
                Log.i(TAG+"---error", arg0.toString()+"");
            }
            /**
             * 返回用戶信息樣例
             * {"is_yellow_year_vip":"0","ret":0,
             * "figureurl_qq_1":"http:\/\/q.qlogo.cn\/qqapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/40",
             * "figureurl_qq_2":"http:\/\/q.qlogo.cn\/qqapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/100",
             * "nickname":"蝸牛","yellow_vip_level":"0","is_lost":0,"msg":"",
             * "city":"成都","
             * figureurl_1":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/50",
             * "vip":"0","level":"0",
             * "figureurl_2":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/100",
             * "province":"四川",
             * "is_yellow_vip":"0","gender":"男",
             * "figureurl":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/30"}
             */
            @Override
            public void onComplete(Object arg0) {
                // TODO Auto-generated method stub
                if(arg0 == null){
                    return;
                }
                try {
                    //獲取到了數(shù)據(jù),自己處理,具體的要自己打印出來(lái)再看怎么解析,也可以看上面的格式
                    Log.i(TAG+"--success", arg0.toString());
                    JSONObject jo = (JSONObject) arg0;
                    int ret = jo.getInt("ret");
                    System.out.println("json=" + String.valueOf(jo));
                    String nickName = jo.getString("nickname");
                    String gender = jo.getString("gender");
                    String city = jo.getString("city");
                    String province = jo.getString("province");
                    String figureurl = jo.getString("figureurl_qq_2");
                    Glide.with(getApplicationContext()).load(figureurl).into(imageView);
                    textView_name.setText("姓名:"+nickName+" 性別:"+gender+" 城市:"+province+","+city);
                } catch (Exception e) {
                    Log.i(TAG+"--success", e.toString());
                }

            }

            @Override
            public void onCancel() {

            }
        });

    }
}
//回傳頁(yè)面的數(shù)據(jù),不能忘記
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    Tencent.onActivityResultData(requestCode,resultCode,data,new BaseUiListener());
    }
}

下面是運(yùn)行之后的效果圖:


到此就結(jié)束了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容