Android 集成QQ登录,获取头像与昵称

QQ登录集成

  1. 腾讯开放平台地址:http://open.qq.com/
    如果没注册过的同学需要先注册,还要上传自己的手持身份证的证件照,腾讯审核通过后才能注册成功。

  2. 创建应用,获取appID。如果测试只要你创建应用,就会给你分配一个appid,其他的不用管;如果真正用于项目中,就需要把腾讯要求的都填好。


下载腾讯的SDK,地址:http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD

路径如下:android_SDK_3.3.1\opensdk_lite+demo\opensdk_lite+demo\libs
下载后解压,如下:


打开jar包,将里面的open_sdk_r5990_lite.jar复制到你的modle的libs中,然后再右键AddAsLirary添加依赖。



准备完毕,写入所需要的权限

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

 <activity
            android:name="com.tencent.tauth.AuthActivity"
            android:launchMode="singleTask"
            android:noHistory="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <!-- 这地方需要用你在开放平台申请的appid:tencent+appid -->
                <data android:scheme="tencent1106646963" />
            </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" />
图片加载使用了Fresco加载,需要导入依赖:
    compile 'com.facebook.fresco:fresco:+'
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal">

    <com.facebook.drawee.view.SimpleDraweeView
        app:roundAsCircle="true"
        android:id="@+id/iv_figure"
        app:failureImage="@mipmap/ic_launcher_round"
        app:placeholderImage="@mipmap/ic_launcher_round"
        android:layout_marginTop="20dp"
        android:layout_width="200dp"
        android:src="@mipmap/ic_launcher_round"
        android:layout_height="200dp"/>
    <TextView
        android:id="@+id/tv_nickname"
        android:layout_marginTop="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="QQ 昵称"/>

    <Button
        android:id="@+id/btn_login"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:text="登录"/>
    <Button
        android:id="@+id/btn_logout"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:text="退出"/>

</LinearLayout>
效果图:


MainActivity  Java代码

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.view.SimpleDraweeView;
import com.tencent.connect.UserInfo;
import com.tencent.connect.auth.QQToken;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;

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

/**
 * Author:Zhangpengfei
 * Date:2018/2/5
 * email:1271396448@qq.com
 */
public class MainActivity extends AppCompatActivity {

    private Button login, logout;
    private Tencent mTencent;
    private static final String APPID = "1105771437";
    private QQLoginListener mListener;
    private UserInfo mInfo;
    private SimpleDraweeView figure;
    private TextView nickName;
    private String name, figureurl;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Fresco.initialize(this);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        figure = (SimpleDraweeView) findViewById(R.id.iv_figure);
        nickName = (TextView) findViewById(R.id.tv_nickname);

        mListener = new QQLoginListener();
        // 实例化Tencent
        if (mTencent == null) {
            mTencent = Tencent.createInstance(APPID, this);
        }

        // 点击登录
        login = (Button) findViewById(R.id.btn_login);
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                QQLogin();
            }
        });
        // 点击退出
        logout = (Button) findViewById(R.id.btn_logout);
        logout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mTencent.isSessionValid()) {
                    mTencent.logout(MainActivity.this);
                    figure.setImageResource(R.mipmap.ic_launcher_round);
                    nickName.setText("QQ 昵称");
                }
            }
        });
    }

    /**
     * 登录方法
     */
    private void QQLogin() {
        //如果session不可用,则登录,否则说明已经登录
        if (!mTencent.isSessionValid()) {
            mTencent.login(this, "all", mListener);
        }
    }

    // 实现登录成功与否的接口
    private class QQLoginListener implements IUiListener {

        @Override
        public void onComplete(Object object) { //登录成功
            //获取openid和token
            initOpenIdAndToken(object);
            //获取用户信息
            getUserInfo();
        }

        @Override
        public void onError(UiError uiError) {  //登录失败
        }

        @Override
        public void onCancel() {                //取消登录
        }
    }

    private void initOpenIdAndToken(Object object) {
        JSONObject jb = (JSONObject) object;
        try {
            String openID = jb.getString("openid");  //openid用户唯一标识
            String access_token = jb.getString("access_token");
            String expires = jb.getString("expires_in");

            mTencent.setOpenId(openID);
            mTencent.setAccessToken(access_token, expires);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    private void getUserInfo() {
        QQToken token = mTencent.getQQToken();
        mInfo = new UserInfo(MainActivity.this, token);
        mInfo.getUserInfo(new IUiListener() {
            @Override
            public void onComplete(Object object) {
                JSONObject jb = (JSONObject) object;
                try {
                    name = jb.getString("nickname");
                    figureurl = jb.getString("figureurl_qq_2");  //头像图片的url
                    /*Log.i("imgUrl",figureurl.toString()+"");*/
                    nickName.setText(name);
                    /*Glide.with(MainActivity.this).load(figureurl).into(figure);*/
                    Uri parse = Uri.parse(figureurl);
                    figure.setImageURI(parse);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onError(UiError uiError) {
            }

            @Override
            public void onCancel() {
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        mTencent.onActivityResultData(requestCode, resultCode, data, mListener);
    }
}
不会弄动图所以这里就不展示运行效果了,这些代码上传完毕之后就可以直接运行了




  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值