首先,各种依赖:
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); } }