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

作者: 不识水的鱼 | 来源:发表于2016-09-20 20:04 被阅读669次

    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());
        }
    }
    

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


    到此就结束了

    相关文章

      网友评论

        本文标题:QQ第三方登录--个人笔记

        本文链接:https://www.haomeiwen.com/subject/fwmoettx.html