目录

  • 1.获取应用AppId
  • 2.获取并配置SDK开发包
  • 3.AndroidManifest.xml引入SDK资源
  • 4.代码引入
  • 5.总结

1.获取应用AppId

(1)QQ互联官网申请:https://connect.qq.com/

说明:登录后,首先认证个人开发者,然后才有权限创建应用,申请填资料的时候,务必真实信息,不然审核打回来,得等很久才通过。

        (2)登录个人开发者QQ:移动应用——开始创建

        (3)进入控制台——应用管理——创建应用


        (4)选择:创建移动应用

        (5)根据自身情况:资料填写

        (6)APP应用签名+logo

        签名工具内容如下:

        (7)创建成功,得到的APPID将在AndroidStudio中使用


2.获取并配置SDK开发包

    (1)下载链接:https://wiki.connect.qq.com/sdk%e4%b8%8b%e8%bd%bd

(2)压缩包文件名:opensdk_355_lite_2021-07-30.zip,解压提取文件:

        (3)找到,我们需要的jar包资源,粘贴拷贝一份在电脑桌面。

说明:官网文档没有明确说明jar包清单,其实需要3个jar包,而解压出的文件,只有一个jar包。因此其它的两个就得去示例项目的libs中手动拷贝,如下:

——copy核心库:open_sdk_3.5.5.79_ra741783e_lite.jar

      ——copy支持库:mid-sdk-2.10.jar、mta-sdk-2.0.0.jar

说明:open_sdk_lite.jar是旧版本SDK核心库

        (4)从电脑桌面复制3个jar包AndroidStudio粘贴项目至项目工程libs目录,并添加依赖引入

        ——工程目录libs:

        ——加载jar包资源:app/build.gradle

implementation fileTree(dir: 'libs', include: '*.jar')


3.AndroidManifest.xml引入SDK资源

        (1)添加Android API 31  系统版本 12 的权限查询,否则Android 12 系统跳转不到授权页,导致点击登录按钮,查询不到手机上已安装的腾讯QQ的APP,出现下载QQ页面,添加如下:

    <queries><package android:name="com.tencent.mobileqq" /></queries>

        (2)添加Android应用权限项

    <!-- qq登陆所需 --><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.GET_TASKS"/><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

        (3)注册SDK需要跳转的Activity,这是SDK封装好的,只需要注册在<application>标签中,就能调用SDK的功能了。

 <!-- 第三方qq登录 --><activityandroid:name="com.tencent.connect.common.AssistActivity"android:configChanges="orientation|keyboardHidden"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar" /><activityandroid:name="com.tencent.tauth.AuthActivity"android:launchMode="singleTask"android:noHistory="true"android:exported="true"><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="tencentAPPID" /></intent-filter></activity>

说明:  <data android:scheme="tencentAPPID" /> 需要替换APPID 为自己的创建应用申请通过的APPID,tencent不能删,例如:tencent123456


4.代码引入

布局就不说了,根据自己需求慢慢搞。

        (1)首先创建获取Tencent实例

——添加全局变量:

//声明Tencent实例名称
public static Tencent mTencent;

——创建Tencent实例:

mTencent = Tencent.createInstance("APPID", LoginActivity.this);if (mTencent == null) {SLog.e(TAG, "腾讯实例创建失败");finish();}

        (2)登录按钮添加单击监听事件,点击按钮调用自定义方法onClickLogin()

        (3)onClickLogin()

 private void onClickLogin() {mTencent.login(this, "all", loginListener);
}

        (4)loginListener报错?,报错就对了,这是登录回调接口。那就写接口实现登录的login()方法。如下:

    IUiListener loginListener = new BaseUiListener() {@Overrideprotected void doComplete(JSONObject values) {/** 此处回调QQ用户数据处理 */initOpenidAndToken(values); //初始化Token//updateUserInfo(); 更新用户信息,头像,用户名//updateLoginButton(); 登录按钮更新为已登录}};public static void initOpenidAndToken(JSONObject jsonObject) {try {String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);String openId = jsonObject.getString(Constants.PARAM_OPEN_ID);if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)&& !TextUtils.isEmpty(openId)) {mTencent.setAccessToken(token, expires);mTencent.setOpenId(openId);}} catch (Exception e) {}}

        (5)BaseUiListener报错?

    private class BaseUiListener extends DefaultUiListener {@Overridepublic void onComplete(Object response) {if (null == response) {FileCodeUtil.showResultDialog(LoginActivity.this, "返回为空", "登录失败");return;}JSONObject jsonResponse = (JSONObject) response;if (jsonResponse.length() == 0) {FileCodeUtil.showResultDialog(LoginActivity.this, "返回为空", "登录失败");return;}FileCodeUtil.showResultDialog(LoginActivity.this, response.toString(), "登录成功");doComplete((JSONObject) response);}protected void doComplete(JSONObject values) {}@Overridepublic void onError(UiError e) {FileCodeUtil.toastMessage(LoginActivity.this, "onError: " + e.errorDetail);FileCodeUtil.dismissDialog();}@Overridepublic void onCancel() {FileCodeUtil.toastMessage(LoginActivity.this, "onCancel: ");FileCodeUtil.dismissDialog();}}

        (6)数据回调成功后,去把头像用户之类的数据,更新显示出来。就得创建线程去更新UI数据

    //下面的msg.what的值,来自updateUserInfo()的DefaultUiListener回调接口Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {if (msg.what == 0) {JSONObject response = (JSONObject) msg.obj;if (response.has("nickname")) { //提取QQ昵称参数try {//成功就执行的操作//mUserInfo.setVisibility(android.view.View.VISIBLE);设置用户名可见//mUserInfo.setText(response.getString("nickname"));//设置QQ昵称刀TextView上} catch (JSONException e) {e.printStackTrace();}}} else if(msg.what == 1){/** 需要更新的操作 *///Bitmap bitmap = (Bitmap)msg.obj; 更新ImageViwe为QQ头像//mUserLogo.setImageBitmap(bitmap);//mUserLogo.setVisibility(android.view.View.VISIBLE);}}};

        (7)这个方法放在登录点击按钮处调用

 private void updateUserInfo() {/ ** 回掉成功后解析数据,Message发送数据UI线程if (mTencent != null && mTencent.isSessionValid()) {IUiListener listener = new DefaultUiListener() {@Overridepublic void onError(UiError e) {}@Overridepublic void onComplete(final Object response) {Message msg = new Message();msg.obj = response;msg.what = 0;mHandler.sendMessage(msg);new Thread(){@Overridepublic void run() {JSONObject json = (JSONObject)response;if(json.has("figureurl")){Bitmap bitmap = null;try {bitmap = Util.getbitmap(json.getString("figureurl_qq_2"));} catch (JSONException e) {SLog.e(TAG, "Util.getBitmap() jsonException : " + e.getMessage());}Message msg = new Message();msg.obj = bitmap;msg.what = 1;mHandler.sendMessage(msg);}}}.start();}@Overridepublic void onCancel() {}};UserInfo info = new UserInfo(this, mTencent.getQQToken());info.getUserInfo(listener);} else {/** 未登录状态 *///mUserInfo.setText("");//mUserInfo.setVisibility(android.view.View.GONE);//mUserLogo.setVisibility(android.view.View.GONE);}}

        (8)自己的应用程序与腾讯QQ应用程序数据交互,必须使用onActivityResult来接收返回的数据

    @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {Log.d(TAG, "-->onActivityResult " + requestCode  + " resultCode=" + resultCode);if (requestCode == Constants.REQUEST_LOGIN ||requestCode == Constants.REQUEST_APPBAR) {Tencent.onActivityResultData(requestCode,resultCode,data,loginListener);}super.onActivityResult(requestCode, resultCode, data);}

5.总结

仅自己学习记录,如有错误,敬请谅解~,谢谢~~~

(AS笔记)Android 实现第三方QQ登录——QQ互联相关推荐

  1. 第三方客户端登录QQ邮箱遇到“无法验证账户名或密码”问题解决

    由于好久没有再登录QQ邮箱了,今天使用MBP的mail客户端登录了下,竟然一直出现无法验证账户名或密码的问题,很是纳闷呀...以图为证? 解决步骤: 登录qq邮箱https://mail.qq.com ...

  2. php 第三方qq 登录,QQ第三方登录

    ### 前置条件 1. 一个QQ号. 2. 一台公网通过域名可访问的web服务器. 3. 需要备案 . ### QQ登录流程 1. 打开网站QQ互联 : [http://connect.qq.com] ...

  3. WebView Attack In Android : 解析第三方账号登录平台所存在的安全隐患

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17663345 前言 这是一个很有趣的话题,WebView在Android中包 ...

  4. Android 微信第三方绑定登录详解

    赢第三方微信登录跟微信支付差别不是很大,下面一一为大家分享一下,欢迎吐槽指正. 接入微信的支付要第一步添加微信支付官方的包libammsdk.jar 一.配置文件Androidmanifest < ...

  5. java 模拟qq空间登陆_java最新完美实现模拟登录QQ登录QQ空间获取说说

    package com.pengliu.config; import com.pengliu.util.http.HttpService; /** * desc: 全局公共属性配置 */ public ...

  6. JavaWeb项目调用QQ登录----QQ互联

    首先要做的在QQ互联申请项目QQ互联官网首页 ,申请通过会得到APPID , APPKey  一 : 在HTML/JSP页面放置符合QQ互联标准的QQ登录图标 附代码: <a href=&quo ...

  7. JAVA-快速接入第三方应用登录(QQ、微信、微博)

    前言:如何快速接入第三方登录?无需第三方审核认证授权,一次性接入多个平台的解决方案, 此处实现使用SpringBoot+vue 实现此效果 1.申请接入应用 http://open.51094.com ...

  8. Android集成第三方微信登录

    第一步: 在微信开放平台创建安卓应用,需要输入的包名和签名就不用再提吧,不知道的自行百度.  应用创建完毕后会得到两个值:AppID.AppSecret,用这两个值来请求微信.  然后去微信开放平台的 ...

  9. 手把手教你Android集成第三方微信登录

    最近公司要求集成第三方的微信登录功能,以前没做过,现在做完梳理下思路. 1.首先要在微信开放平台注册你的APP.获取APP的id和APPSecret. 2.然后要集成微信的sdk jar包 3.创建一 ...

  10. Android 实现第三方Facebook登录的具体实现

    前言:因为之前做的项目中需要接入Facebook登录,所以为大家带来Facebook的eclipse版本.在这里简单具体说一下接入的过程中的一些问题和注意的事项,希望为大家解决一些遇到的问题和坑.坑. ...

最新文章

  1. Android如何实现简单音乐播放器的代码
  2. vue:model和v-model的区别
  3. ICPC网络赛第二场G Limit
  4. 美妆海报模板|来点创意的海报设计(立体剪纸风格)
  5. 【数据结构】进击的二叉查找树
  6. 求一个容器的最值的索引_初中几何最值——瓜豆原理模型分析
  7. c语言oj得pe,ACM入门之OJ~
  8. [读书]《罗辑思维》第一季、第二季推荐书籍清单
  9. 大数取模运算Barrett reduction
  10. 安全防范报警系统产品质量监督检测测试中心(上海)
  11. 期货期权股票资管分仓系统(子账户系统、风控系统)的功能介绍
  12. Java 算法:带权图Weighted Graph
  13. 反向代理和正向代理的区别介绍
  14. Windows 在目录中搜索哪个文件中有指定字符串
  15. RRC连接、RL、RB、RAB的本质是什么?
  16. ArcGis之椭球面积计算工具
  17. 凑齐三块国字号“招牌”,长沙要召唤智能汽车产业的“神龙”了
  18. 3D游戏引擎剖析【较全面】
  19. 网络拓扑 代码 matlab,matlabdaima 复杂网络拓扑特征统计的编程代码,可以计算 中各种 值 Other systems 其他 246万源代码下载- www.pudn.com...
  20. 中柏ezpadE7装linux,中柏EZpad i7怎么样 中柏EZpad i7详细评测

热门文章

  1. mysql front连接_mysql server连接mysql-front方法
  2. 植物大战僵尸音乐计算机简谱,植物大战僵尸主题曲简谱|植物大战僵尸主题曲:Zombies on Your Lawn...
  3. 20款优秀的数据可视化工具 (建议收藏)
  4. 2022-2028年中国汽车紧固件行业市场深度分析及投资决策建议报告
  5. 紧固件基础知识之规格篇和功能篇
  6. 提供全套Python教学资源和考试系统,全力打造良心服务
  7. 工具说明书 - 滚动截屏和录屏软件ShareX
  8. 直击DTCC2018 阿里数据库技术干货全面解析
  9. Paper--3d reconstruction:Photo Tourism: Exploring Photo Collections in 3D
  10. android ps icon图标制作,PS设计App图标教程