您的位置:首页 > 移动开发 > Android开发

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

2018-02-05 12:01 921 查看


QQ登录集成

腾讯开放平台地址:http://open.qq.com/

如果没注册过的同学需要先注册,还要上传自己的手持身份证的证件照,腾讯审核通过后才能注册成功。

创建应用,获取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);
}
}

不会弄动图所以这里就不展示运行效果了,这些代码上传完毕之后就可以直接运行了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: