Android第三方QQ登陆
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android第三方QQ登陆相关的知识,希望对你有一定的参考价值。
现在论坛网站使用了Discuz内置的QQ登陆功能,不是QQ互联上提供给第三方的api,但是现在和网站同步的android 论坛app 也需要QQ登陆,而且app登陆的用户和网站上登陆的用户是同一个QQ,里面的数据都要一样。
比如在论坛网站上用QQ登陆过,发过帖子,然后现在要在app上登陆,可以看到以前发的帖子。
有木有大神帮忙解决下
一. QQ登录目前采用OAuth2.0标准协议来进行用户身份验证和获取用户授权。整个流程如下所述,这里比如一个应用A
可以使用QQ账户登陆。
1. 用户访问客户端的应用,试图操作用户存放在服务提供方的资源。比如用户用QQ账户登录 应用 A程序,同时可以获
得用户昵称头像等保存在腾讯服务器的用户信息。
2. 输入QQ账号后,应用A后向服务提供方 (腾讯) (Request Token)。 请求一个临时令牌
3. 服务提供方 (腾讯)(应用A)的身份后,授予一个临时令牌。验证客户端
4. 客户端(应用A)获得临时令牌后,将用户引导至服务提供方(腾讯)的授权页面请求用户授权。在这个过程中将临时令牌和客户端的 回调连接发送给服务提供方(腾讯)。
5. 用户在服务提供方(腾讯)的网页上输入用户名和密码,然后授权该客户端(应用A)访问所请求的资源。
6. 授权成功后,服务提供方(腾讯)引导用户返回到客户端(应用A)提供的回调页面。
7. 客户端(应用A)根据临时令牌从服务提供方(腾讯)那里获取访问令牌 (Access Token)。
8. 根据访问令牌 (Access Token)获得对应用户身份的openid,
9. 然后客户端(应用A)根据访问令牌 (Access Token)与openid调用OpenAPI,来请求访问或修改用户授权的资源(比如昵称用户头像等经过用户授权的信息)。
10.拿到访问令牌 (Access Token)之后,客户端(应用A)可以保存起来,下次就不用再向服务提供方(腾讯)请求授权,直接就可以使用该账户授权的资源,相当于保存了用户名和密码,但是真正的用户名和密客户端(应用A)并不知道。
比如一个信息发布的网站,可以使用QQ账号登录,用户通过安全页面输入QQ账号信息后显示登陆成功,同时询问用户
是否允许该网站使用用户的一些信息,比如资料,相册等,经过用户确认后该网站可以拿到用户授权的信息。同时拿到访
问令牌 (Access Token),以后该网站就可以用这个访问获得该用户的这些授权信息,而不需要再次输入账户信息。一般该
网站也要提供删除这个访问令牌的入口。这样就可以很方便的把用户愿意提供的信息拿到这个信息发布网站使用,而用户
不需要再次登记录入。
二.QQ 为Android移动设备开发提供QQ登陆的开发包,对上述的过程进行的封装,对开发者来说可以方便的使用。要真正开发一个使用QQ账户登录的App,就需要在腾讯社区开放平台注册应用, 申请对应的 appid 和appkey ,这个开发App 时候要用到。
1. 可以在腾讯开放API站点下载最新的QQ登录API库文件和Demo。
2.下载后的Demo工程如下,导入了库文件tencent_openapi.jar如下图一所示。
Demo介绍了两种登陆方式,手机浏览器和WebView,传入不同的参数,进入不同的登录方式,然后输入账户信息后会
根据用户选择返回不同的结果。开发者可以参考这些对应的代码即可完成授权登录的功能开发。 参考技术A 软件和论坛都是qq互联网授权的,没有内置这一说,内置了他岂不是掌握了所以qq用户的数据了,用qq登陆肯定要过的是腾讯检测,腾讯知道账号密码对了才让你登。追问
Discuz被腾讯收购了,所以它里面用的就是腾讯的东西,是内置的,跟腾讯开放给第三方应用的api不一样
追答那也是授权,qq账号和论坛账号是没有关系的,要说关系那就是绑定,基本是discuz论坛你用qq快速登录后还需要去注册论坛账号,论坛 又不是腾讯开的,你比如我自己开一个论坛,discuz的,用户都用qq登陆而不绑定论坛账号,那我的数据库在哪里??
要不你就给我提供一下你说的那个论坛,我看看是哪个论坛直接用qq就可以的,我刚才还专门照了两个论坛,火影忍者中文网论坛和另一个,都是discuz的,专门实验了一下,都是授权,你能不能提供一下你说的论坛。
不好意思啊,你说的对,我之前没表达清楚,是绑定关系,但是现在绑定的QQ和论坛账号的对应关系,在数据库里看不到,好像是一串加密的字符,我在App上用已经绑定论坛账号的QQ登陆,怎么才能实现找到绑定的论坛账号,提取数据?
追答你是不是用的掌上论坛啊,应该可以的,要不就电脑登陆那个网站在看看是不是没绑定好什么之类的。
追问嗯,是想做一个掌上论坛,网站这边都绑定好了的。刚才看了一下火影忍者中文网论坛,它那里有个手机版,不过只是做了个手机网页,难道用了Discuz真的实现不了和第三方同步?
追答discuz手机版的网页都可以做到同步用qq登陆,一个论坛做一个app不值得吧,基本上都是一个手机版的网页而已。
本回答被提问者采纳第三方登陆微博qq微信
源文:http://blog.csdn.net/tivonalh/article/details/60954373
假设是已经申请完成各平台开发者账号。
先来简单的,微博和QQ
微博:
引入微博JS
<script src="http://tjs.sjs.sinajs.cn/open/api/js/wb.js?appkey=*******&debug=true" type="text/javascript" charset="utf-8"></script>
appkey中,填入你的微博开发者id(替换****)
1
|
< span id="wb_connect_btn">微博登录按钮</ span > |
在你的页面微博登录按钮标签上,加入以上id。页面加载时,微博会自动加载样式,你也可以自己强行修改。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
< script > WB2.anyWhere(function (W) { W.widget.connectButton({ id: "wb_connect_btn", type: ‘3,2‘, callback: { login: function (o) { //登录后的回调函数 console.log(o); thirdparty(null,null,o.avatar_hd, o.name ,3, o.id);//个人方法 try{ document.getElementsByClassName(‘loginout‘)[0].click(); //页面需求,当前页面登录完成之后,不进行跳转,所以模拟点击事件,让微博账号在当前域中退出。不影响下次登录。(元素为微博动态添加) //微博没有提供退出方法。下面的logout为另一种开发模式调用。 }catch(e){ console.log(e); } }, logout: function () { //退出后的回调函数 } } }); }); </ script > |
将以上标签全部加入html中。
至此,只要在页面中登录之后,就能在控制台看到返回数据。当然,测试要在微博注册的域下。
QQ登录:
引入JavaScript文件
<script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-appid="******" charset="utf-8"></script>
微博类似,替换为你的appid
<span id="qqLoginBtn"></span>
登录标签中加入id标识
然后JavaScript中加入以下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
QC.Login({ //btnId:插入按钮的节点id,必选 btnId:"qqLoginBtn", //用户需要确认的scope授权项,可选,默认all scope:"all", //按钮尺寸,可用值[A_XL| A_L| A_M| A_S| B_M| B_S| C_S],可选,默认B_S size: "B_S" }, function(reqData, opts){//登录成功 //根据返回数据,更换按钮显示状态方法 console.log(reqData);//查看返回数据 QC.Login.getMe(function(openId, accessToken){//获取用户的openId console.log(‘QQOPENID:‘+openId); thirdparty(null,null,reqData.figureurl_qq_2,reqData.nickname,1,openId); QC.Login.signOut();//退出QQ登录调用事件 }); } ); |
测试要在QQ中注册的域名下。重要的事情,再说一遍。
QQ和微博登录,大致相同,只要引入JS文件,然后直接调用方法即可,QQ比微博更和谐,直接提供退出事件。上面代码中有。。
现在来说最蛋疼的微信登录。
微信登录提供两种方法:
第一种,扫码登录:
需要在微信开发者平台中,注册获取appId。
微信登录按钮:
<span class="weixin-login"></span>
在你微信登录按钮上,添加点击事件,执行以下代码:
$(‘.weixin-login‘).on(‘click‘,function(){ window.location.href=‘https://open.weixin.qq.com/connect/qrconnect?‘ + ‘appid=*******&redirect_uri=http%3a%2f%2fwww.xxxxxx.com%2f‘+window.location.pathname.substr(1)+‘&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect‘; });
需要替换:
redirect_url:要想传当前url,直接encodeURIComponent(window.location.href) //当然,需要你自己进行拼接,不懂的留言
至此,当用户点击之后,跳转至扫码界面:
例如:https://passport.yhd.com/wechat/callback.do?code=CODE&state=3d6be0a4035d839573b04816624a415e
至此,拿到第一步令牌,code。在你的回调页面中,你要获取url中的code去和微信换取下一步的令牌。因为换取下一步的令牌需要涉及到跨域请求,但是微信不让跨域请求,只能在后台进行后续事项。
第二步,后台请求:https://api.weixin.qq.com/sns/oauth2/access_token?appid=[APPID]&secret=[SECRET]&code=[CODE]&grant_type=authorization_code
替换中括号中的数据。(我走的get请求)
返回以下数据:
1
2
3
4
5
6
7
8
|
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE", "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" } |
最后一步就不说了:
https://api.weixin.qq.com/sns/userinfo?access_token=[ACCESS_TOKEN]&openid=[OPENID]
替换成上次请求获取到的数据,再请求一次,获奖用户基本信息。
详情查看微信开发者帮助
.
以上是关于Android第三方QQ登陆的主要内容,如果未能解决你的问题,请参考以下文章