首页 > 编程知识 正文

qq第三方登陆,qq第三方登录sdk

时间:2023-05-06 19:26:47 阅读:219159 作者:211

前言:以前做登录时都是使用mob等第三方平台,后来看见腾讯自己的SDK实现起来也非常的简介,以此做记录。

1、效果图:
登录前:

登录后:

2、腾讯SDK下载链接:

http://wiki.open.qq.com/wiki/mobile/SDK下载

解压后依次打开opensdk_lite+demo>libs,找到open_sdk_r6008_lite.jar
并复制到如下图目录下,并右键Add As Library

腾讯QQ APP ID的获取 注册网址:https://open.tencent.com/
点开管理中心找到即可(应用不需要审核上架)

3、登录界面

public class TestActivity extends AppCompatActivity { private static final String TAG = "TestActivity"; //QQ包名 private static final String PACKAGE_QQ = "com.tencent.mobileqq"; //微信包名 private static final String PACKAGE_WEIXIN = "com.tencent.mm"; //新浪微博包名 private static final String PACKAGE_WEIBO = "com.sina.weibo"; //展示个人信息 private TextView infoText, infoName; private ImageView infoIcon; //初始化腾讯服务 private Tencent mTencent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); //腾讯AppId(替换你自己App Id)、上下文 mTencent = Tencent.createInstance("1107123456", this); infoText = this.findViewById(R.id.text_info); infoIcon = this.findViewById(R.id.info_icon); infoName = this.findViewById(R.id.info_name); //登录点击事件 findViewById(R.id.button_login).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //注意:此段非必要,如果手机未安装应用则会跳转网页进行授权 if (!hasApp(TestActivity.this, PACKAGE_QQ)) { Toast.makeText(TestActivity.this, "未安装QQ应用", Toast.LENGTH_SHORT).show(); return; } //如果session无效,就开始做登录操作 if (!mTencent.isSessionValid()) { loginQQ(); } } }); } /** * QQ登录 */ private IUiListener listener; private void loginQQ() { listener = new IUiListener() { @Override public void onComplete(Object object) { Log.e(TAG, "登录成功: " + object.toString() ); JSONObject jsonObject = (JSONObject) object; try { //得到token、expires、openId等参数 String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN); String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN); String openId = jsonObject.getString(Constants.PARAM_OPEN_ID); mTencent.setAccessToken(token, expires); mTencent.setOpenId(openId); Log.e(TAG, "token: " + token); Log.e(TAG, "expires: " + expires); Log.e(TAG, "openId: " + openId); //获取个人信息 getQQInfo(); } catch (Exception e) { } } @Override public void onError(UiError uiError) { //登录失败 Log.e(TAG, "登录失败" + uiError.errorDetail); Log.e(TAG, "登录失败" + uiError.errorMessage); Log.e(TAG, "登录失败" + uiError.errorCode + ""); } @Override public void onCancel() { //登录取消 Log.e(TAG, "登录取消"); } }; //context上下文、第二个参数SCOPO 是一个String类型的字符串,表示一些权限 //应用需要获得权限,由“,”分隔。例如:SCOPE = “get_user_info,add_t”;所有权限用“all” //第三个参数事件监听器 mTencent.login(this, "all", listener); //注销登录 //mTencent.logout(this); } /** * 获取QQ个人信息 */ private void getQQInfo() { //获取基本信息 QQToken qqToken = mTencent.getQQToken(); UserInfo info = new UserInfo(this, qqToken); info.getUserInfo(new IUiListener() { @Override public void onComplete(Object object) { try { Log.e(TAG, "个人信息:" + object.toString()); infoText.setText(object.toString()); //头像 String avatar = ((JSONObject) object).getString("figureurl_2"); GlideUtils.showGlide(TestActivity.this, avatar, infoIcon); String nickName = ((JSONObject) object).getString("nickname"); infoName.setText(nickName); } catch (JSONException e) { e.printStackTrace(); } } @Override public void onError(UiError uiError) { } @Override public void onCancel() { } }); } /** * 回调必不可少,官方文档未说明 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //腾讯QQ回调 Tencent.onActivityResultData(requestCode, resultCode, data, listener); if (requestCode == Constants.REQUEST_API) { if (resultCode == Constants.REQUEST_LOGIN) { Tencent.handleResultData(data, listener); } } } /** * true 安装了相应包名的app */ private boolean hasApp(Context context, String packName) { boolean is = false; List<PackageInfo> packages = context.getPackageManager() .getInstalledPackages(0); for (int i = 0; i < packages.size(); i++) { PackageInfo packageInfo = packages.get(i); String packageName = packageInfo.packageName; if (packageName.equals(packName)) { is = true; } } return is; }}

对应布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="vertical" android:padding="10dp" tools:context=".activity.TestActivity"> <ImageView android:id="@+id/info_icon" android:src="@mipmap/ic_launcher" android:layout_width="150dp" android:layout_height="150dp" /> <TextView android:gravity="center" android:id="@+id/info_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20sp" /> <TextView android:layout_marginBottom="10dp" android:layout_marginTop="10dp" android:id="@+id/text_info" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="14sp" /> <Button android:id="@+id/button_login" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="QQ登录" /></LinearLayout>

4、扩展:代码中图片加载框架

//图片加载 implementation 'com.github.bumptech.glide:glide:4.7.1'

格式化个人信息:网址:https://www.bejson.com/

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。