QQ第三方登录--个人笔记

qq登录有很多方式,在这里做一个笔记记录一下qq的第三方登录,并且获取到个人信息
首先在腾讯的开发者平台注册开发者账号,网上有的说是qq互联,我这里用的是腾讯的开发者平台注册的一个测试的demo链接
腾讯开发平台


这里获取到了appkey 和 appid,之后要用到
新建一个工程,下载qq登录的sdk,并导入相应的jar包。
下载地址
SDK下载地址
按照网站里面的相关操作,完成基本的配置,我用的是android studio,有点不一样。
创建一个工程,并把open-sdk.jar文件和mta_sdk_x.x.x.jar文件拷贝到libs(或lib)目录下,如下图所示:

点击右键将jar包同步到工程
添加权限

<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,在开发者平台申请到的appid
tencent不能删,只是改写后面的“你的AppId”。
在解压之后的sdk里面,有一个AppConstants接口,把它考入到自己的工程路面,也可以自己写,这里主要就是用到appid的时候调用一下而已,自己写如下:

package com.example.yukun.webapplication;

public class AppConstants {
// APP_ID 替换为你的应用从官方网站申请到的合法appId
//public static final String APP_ID = "wxd930ea5d5a258f4f";

public static final String APP_ID="1105698282";
//申请的开发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的代码,这里获取到授权,并且获取到个人信息,布局很简单,就是两个按钮,一个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();
        }

    });
    //按钮,获取个人信息
    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            User();
        }
    });
}



private void LoginQQ() {
    //这里的APP_ID请换成你应用申请的APP_ID,我这里使用的是DEMO中官方提供的测试APP_ID 222222
    String mAppid = AppConstants.APP_ID; //这里就是我们之前写的那个接口,或者拷贝进来的,就是为了获取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 {
            //获得的数据是JSON格式的,获得你想获得的内容
            //如果你不知道你能获得什么,看一下下面的LOG

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

            //绝对不要能忘记,网上的很多没有这个两句,我试了很久就是没成功,后来发现添加上了这两句,获取个人信息的时候才不会报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);
    }

}

//这里获取到个人信息
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 {
                    //获取到了数据,自己处理,具体的要自己打印出来再看怎么解析,也可以看上面的格式
                    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() {

            }
        });

    }
}
//回传页面的数据,不能忘记
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

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

下面是运行之后的效果图:


到此就结束了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容