Android 实现QQ第三方登录
Android 实现QQ第三方登录
在项目中需要实现QQ第三方登录,经过一番努力算是写出来了,现在总结以下,以防以后遗忘,能帮到其他童鞋就更好了。
首先肯定是去下载SDK和DEMO
http://wiki.open.qq.com/wiki/mobile/SDK下载
本文是我自己整合后的简单DEMO。
先看下效果图吧





原理:我们要使用QQ登录我们的应用,不是不用注册,是我们在后台为用户注册了,但是用户不知道,注册需要唯一标识,上图的那串字母与数字的组合就是我们要获得的唯一标识:OpenID.
跟着代码来说吧。
首先,我们要加载open_sdk.jar和mta-sdk-1.00.jar这两个架包顺便看下我总共用到的类


其中,AppConstant中是用来放置APPID的,由于考虑到还可能引入其他第三方登录,为方便管理,故创建此类。Util是根据路径从网上获取图片的处理类
好了进入主题
首先在AndroidManifest.xml中进行两个定义如果不定义是不行的
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<intent-filter> <category android:name="android.intent.category.DEFAULT"> <category android:name="android.intent.category.BROWSABLE"> <data android:scheme="tencent222222"><!--—注意在这里用你的appid替换222222 ----> </data></category></category></action></intent-filter> </activity> </activity> |
然后是两个权限
|
1
2
3
|
<uses-permission android:name="android.permission.INTERNET"> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission></uses-permission> |
接下来是布局文件,activity_main.xml登录按钮,获取头像、昵称、openid的textview
|
1
2
3
4
5
6
7
8
|
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <button android:id="@+id/login" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="登录"> <imageview android:id="@+id/user_logo" android:layout_width="wrap_content" android:layout_height="wrap_content"> <textview android:id="@+id/user_nickname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textcolor="#80505050" android:textsize="18sp"> <textview android:id="@+id/user_openid" android:layout_width="wrap_content" android:layout_height="wrap_content"> </textview></textview></imageview></button></linearlayout> |
然后是MainActivity
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
public class MainActivity extends Activity implements OnClickListener { TextView openidTextView; TextView nicknameTextView; Button loginButton; ImageView userlogo; private Tencent mTencent; public static QQAuth mQQAuth; public static String mAppid; public static String openidString; public static String nicknameString; public static String TAG="MainActivity"; Bitmap bitmap = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //用来登录的Button loginButton=(Button)findViewById(R.id.login); loginButton.setOnClickListener(this); //用来显示OpenID的textView openidTextView=(TextView)findViewById(R.id.user_openid); //用来显示昵称的textview nicknameTextView=(TextView)findViewById(R.id.user_nickname); //用来显示头像的Imageview userlogo=(ImageView)findViewById(R.id.user_logo); } public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.login: LoginQQ(); break; default: break; } } //这里是调用QQ登录的关键代码 public void LoginQQ() { //这里的APP_ID请换成你应用申请的APP_ID,我这里使用的是DEMO中官方提供的测试APP_ID 222222 mAppid = AppConstant.APP_ID; //第一个参数就是上面所说的申请的APPID,第二个是全局的Context上下文,这句话实现了调用QQ登录 mTencent = Tencent.createInstance(mAppid,getApplicationContext()); /**通过这句代码,SDK实现了QQ的登录,这个方法有三个参数,第一个参数是context上下文,第二个参数SCOPO 是一个String类型的字符串,表示一些权限 官方文档中的说明:应用需要获得哪些API的权限,由“,”分隔。例如:SCOPE = “get_user_info,add_t”;所有权限用“all” 第三个参数,是一个事件监听器,IUiListener接口的实例,这里用的是该接口的实现类 */ mTencent.login(MainActivity.this,"all", new BaseUiListener()); } /**当自定义的监听器实现IUiListener接口后,必须要实现接口的三个方法, * onComplete onCancel onError *分别表示第三方登录成功,取消 ,错误。*/ private class BaseUiListener implements IUiListener { public void onCancel() { // TODO Auto-generated method stub } public void onComplete(Object response) { // TODO Auto-generated method stub Toast.makeText(getApplicationContext(), "登录成功", 0).show(); try { //获得的数据是JSON格式的,获得你想获得的内容 //如果你不知道你能获得什么,看一下下面的LOG Log.e(TAG, "-------------"+response.toString()); openidString = ((JSONObject) response).getString("openid"); openidTextView.setText(openidString); Log.e(TAG, "-------------"+openidString); //access_token= ((JSONObject) response).getString("access_token"); //expires_in = ((JSONObject) response).getString("expires_in"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } /**到此已经获得OpneID以及其他你想获得的内容了 QQ登录成功了,我们还想获取一些QQ的基本信息,比如昵称,头像什么的,这个时候怎么办? sdk给我们提供了一个类UserInfo,这个类中封装了QQ用户的一些信息,我么可以通过这个类拿到这些信息 如何得到这个UserInfo类呢? */ QQToken qqToken = mTencent.getQQToken(); UserInfo info = new UserInfo(getApplicationContext(), qqToken); //这样我们就拿到这个类了,之后的操作就跟上面的一样了,同样是解析JSON |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
info.getUserInfo(new IUiListener() { public void onComplete(final Object response) { // TODO Auto-generated method stub Log.e(TAG, "---------------111111"); Message msg = new Message(); msg.obj = response; msg.what = 0; mHandler.sendMessage(msg); Log.e(TAG, "-----111---"+response.toString()); /**由于图片需要下载所以这里使用了线程,如果是想获得其他文字信息直接 * 在mHandler里进行操作 * */ new Thread(){ @Override public void run() { // TODO Auto-generated method stub JSONObject json = (JSONObject)response; try { bitmap = Util.getbitmap(json.getString("figureurl_qq_2")); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } Message msg = new Message(); msg.obj = bitmap; msg.what = 1; mHandler.sendMessage(msg); } }.start(); } public void onCancel() { Log.e(TAG, "--------------111112"); // TODO Auto-generated method stub } public void onError(UiError arg0) { // TODO Auto-generated method stub Log.e(TAG, "-111113"+":"+arg0); } }); } public void onError(UiError arg0) { // TODO Auto-generated method stub } } Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 0) { JSONObject response = (JSONObject) msg.obj; if (response.has("nickname")) { try { nicknameString=response.getString("nickname"); nicknameTextView.setText(nicknameString); Log.e(TAG, "--"+nicknameString); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }else if(msg.what == 1){ Bitmap bitmap = (Bitmap)msg.obj; userlogo.setImageBitmap(bitmap); } } }; } |

上图是登录Q的返回LOG

上图是我们获得腾讯提供的UserInfo返回的LOG
然后是AppConstant.java
|
1
2
3
|
public class AppConstant { public static String APP_ID="222222";} |
然后是Util.java
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public class Util { public static String TAG="UTIL"; public static Bitmap getbitmap(String imageUri) { Log.v(TAG, "getbitmap:" + imageUri); // 显示网络上的图片 Bitmap bitmap = null; try { URL myFileUrl = new URL(imageUri); HttpURLConnection conn = (HttpURLConnection) myFileUrl .openConnection(); conn.setDoInput(true); conn.connect(); InputStream is = conn.getInputStream(); bitmap = BitmapFactory.decodeStream(is); is.close(); Log.v(TAG, "image download finished." + imageUri); } catch (IOException e) { e.printStackTrace(); Log.v(TAG, "getbitmap bmp fail---"); return null; } return bitmap; }} |
至此全部代码就在这里了,我们获得了OpenID这个唯一标识最关键的东西,然后看项目中需要登录的接口还需要什么信息,获取到就能实现登陆了。
Android 实现QQ第三方登录的更多相关文章
- Android应用之——最新版本号SDK V2.4实现QQ第三方登录
为什么要写这篇博客呢?由于.我在做这个第三方登录的时候,找了非常多资料,发现要么就是过时了.要么就是说的非常不清楚.非常罗嗦.并且非常多都是一些小demo,不是什么实例.甚至连腾讯官方的文档都有这个问 ...
- QQ第三方登录
QQ第三方登录 在Android应用程序的开发过程中,很多时候需要加入用户登录/注册模块.除了自己动手设计登录界面并实现相应功能外,现在还可以借助百度.腾讯等开发者平台提供的第三方账号登录模块.最近研 ...
- 使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样
使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样openid生成是根据应用的appid和QQ号的一些信息加密生成,对于一个appid和QQ号来说,openid是唯一的 ...
- 【第三方登录】之QQ第三方登录
最近公司做了个网站,需要用到第三方登录的东西.有QQ第三方登录,微信第三方登录.先把QQ第三方登录的代码列一下吧. public partial class QQBack : System.Web.U ...
- PHP实现QQ第三方登录
PHP实现QQ第三方登录 学习之前,请大家先看一下oAuth协议. 首先呢,我们进入QQ互联的官方网站 http://connect.qq.com登入我们自己的QQ号,没有QQ号的小伙伴可以忽略本篇博 ...
- 利用JS_SDK实现QQ第三方登录
前言 现如今,第三方登录已成为大部分网站必备的一项基础技能,引入时髦的第三方登录不仅能帮你吸引更多的用户,也让你的网站可以充分利用其他大型网站的用户资源.本次教程将让你的网站最快捷便利地引入QQ登录. ...
- web实现QQ第三方登录
开放平台-web实现QQ第三方登录 应用场景 web应用通过QQ登录授权实现第三方登录. 操作步骤 1 注册成为QQ互联平台开发者,http://connect.qq.com ...
- Django项目中使用qq第三方登录。
使用qq登录的前提是已经在qq互联官网创建网站应用并获取到QQ互联中网站应用的APP ID和APP KEY 1,建路由 # qq登录 path('loginQq/',qq.loginQq,name=' ...
- QQ第三方登录回调地址的问题
如题,维护以前的项目,发现原来QQ的第三方登录竟然失败了.回调地址的问题 原来是以前的规则变了.好吧,那就改,谁叫我不是改变规则的人. 中途浪费了点时间,项目很大,我一下也找不到项目里那个接口调用的, ...
随机推荐
- IOS苹果手机上 iframe 滚动失效条问题,局部滚动开启弹性滚动!
html:bo<div class="scroll-wrapper"> <iframe src=""></iframe> & ...
- Raft 实现日志复制同步
Raft 实现日志复制同步 本篇文章以 John Ousterhout(斯坦福大学教授) 和 Diego Ongaro(斯坦福大学获得博士学位,Raft算法发明人) 在 Youtube 上的讲解视频及 ...
- [TensorFlow] Basic Usage
Install TensorFlow on mac Install pip # Mac OS X $ sudo easy_install pip $ sudo easy_install --upgra ...
- form表单的两种提交方式,submit和button的用法
1.当输入用户名和密码为空的时候,需要判断.这时候就用到了校验用户名和密码,这个需要在jsp的前端页面写:有两种方法,一种是用submit提交.一种是用button提交.方法一: 在jsp的前端页面的 ...
- java_web总结(一)
1.struts1ajax返回值 public ActionForward preChangeAccountPwd(ActionMapping mapping, ActionForm form, Ht ...
- hashcode的一些了解
1.hashcode的作用? hashcode代表对象的特征,在集合类中广泛的使用. 2.hashcode是如何生成的? 在普通的对象中,获得对象的内存的地址,经过一些算法,不同对象生成不同的hash ...
- php安装详解
获取资源: cd /usr/local/src/ wget http://cn2.php.net/distributions/php-5.4.45.tar.bz2 tar jxvf php-5.4.4 ...
- Azure机器学习入门(三)创建Azure机器学习实验
在此动手实践中,我们将在Azure机器学习Studio中一步步地开发预测分析模型,首先我们从UCI机器学习库的链接下载普查收入数据集的样本并开始动手实践: http://archive.ics.uci ...
- OSGI框架中通过BundleContext对象对服务的注册与引用
BundleActivator 在每个Bundle新建时都会默认生成Activator类,该类实现了BundleActivator类,实现了其start()和stop()两个方法 BundleCont ...
- javascript之自增自减典型运算(易错)
JavaScript“自增”运算符与表达式 递增运算符(++)是一个一元运算符,该运算符可以将操作数进行递增操作,即每次增加1.递增运算符要求其操作数必须是变量.对象中的某个属性或数组中的某个元素,并 ...