QQ第三方登录的简单实现

首先,各种依赖:

implementation files('libs/open_sdk_r5990_lite.jar')
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.github.bumptech.glide:glide:3.7.0'
(去QQ官网下载依赖包)

清单文件中:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.zym.qq_third_login">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <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="tencent1105602574" />
            </intent-filter>
        </activity>
        <activity android:name="com.tencent.connect.common.AssistActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="orientation|keyboardHidden|screenSize"
            />
    </application>

</manifest>

MainActivity中:

package com.example.zym.qq_third_login;

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

import com.bumptech.glide.Glide;
import com.google.gson.Gson;
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;


public class MainActivity extends AppCompatActivity {
    private Tencent mTencent;
    private IUiListener loginListener;
    private static final String APP_ID = "1105602574";
    private TextView tv;
    private ImageView img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = findViewById(R.id.tv);
        img = findViewById(R.id.img);


        mTencent = Tencent.createInstance(APP_ID, this);

        loginListener = new IUiListener() {
            @Override
            public void onComplete(Object value) {
                if (value == null) {
                    return;
                }

                try {
                    JSONObject json = (JSONObject) value;
                    int ret = json.getInt("ret");
                    Log.i("00000", "QQ登录返回json:" + json.toString());

                    if (ret == 0) {
                        final String accessToken = json.getString("access_token");
                        final String openid = json.getString("openid");
                        final String expires_in = json.getString("expires_in");

                        /**如果后台需要openid来做登录处理,在此处编写网络请求*/

                        mTencent.setOpenId(openid);
                        mTencent.setAccessToken(accessToken, expires_in);

                        QQToken qqToken = mTencent.getQQToken();
                        UserInfo info = new UserInfo(MainActivity.this, qqToken);

                        /** 获取用户部分信息监听器*/
                        info.getUserInfo(new IUiListener() {

                            @Override
                            public void onError(UiError error) {

                            }

                            @Override
                            public void onComplete(Object value) {
                                JSONObject json = (JSONObject) value;
                                Gson gson = new Gson();
                                Data data = gson.fromJson(json.toString(), Data.class);

                                tv.setText(data.getNickname());
                                Glide.with(MainActivity.this).load(data.getFigureurl()).into(img);


                                Log.i("++++", "QQ登录返回用户信息:" + json.toString());
                            }

                            @Override
                            public void onCancel() {

                            }
                        });

                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onError(UiError error) {
                Log.i("++++", "登录失败" + error);
            }

            @Override
            public void onCancel() {
                Log.i("++++", "用户取消" );
            }
        };

    }

    public void qqLogin(View view) {
        // 如果session无效,就开始登录
        if (!mTencent.isSessionValid()) {
            // 要所有权限,"all",不然会再次申请增量权限
            mTencent.login(MainActivity.this, "all", loginListener);
        }
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Tencent.onActivityResultData(requestCode, resultCode, data, loginListener);
    }

}

猜你喜欢

转载自blog.csdn.net/love_xxxooo/article/details/79797408