Android实现QQ第三方登录

转载 2015年11月18日 16:28:32

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中进行两个定义如果不定义是不行的

01.<activity
02.android:name="com.tencent.tauth.AuthActivity"
03.android:launchMode="singleTask"
04.android:noHistory="true" >
05.<intent-filter>
06.<action android:name="android.intent.action.VIEW" />
07. 
08.<category android:name="android.intent.category.DEFAULT" />
09.<category android:name="android.intent.category.BROWSABLE" />
10. 
11.<data android:scheme="tencent222222" /><!—注意在这里用你的appid替换222222 -->
12.</intent-filter>
13.</activity>
14.<activity android:name="com.tencent.connect.common.AssistActivity"
15.android:theme="@android:style/Theme.Translucent.NoTitleBar"
16.android:screenOrientation="portrait"/>

 

然后是两个权限

1.<uses-permission android:name="android.permission.INTERNET" />
2.<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

 

接下来是布局文件,activity_main.xml登录按钮,获取头像、昵称、openid的textview

01.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03.android:layout_width="fill_parent"
04.android:layout_height="fill_parent"
05.android:orientation="vertical">
06.<Button
07.android:id="@+id/login"
08.android:layout_width="fill_parent"
09.android:layout_height="wrap_content"
10.android:text="登录"/>
11.<ImageView
12.android:id="@+id/user_logo"
13.android:layout_width="wrap_content"
14.android:layout_height="wrap_content"
15./>
16.<TextView
17.android:id="@+id/user_nickname"
18.android:layout_width="wrap_content"
19.android:layout_height="wrap_content"
20.android:textColor="#80505050"
21.android:textSize="18sp"
22./>
23.<TextView
24.android:id="@+id/user_openid"
25.android:layout_width="wrap_content"
26.android:layout_height="wrap_content" 
27./>
28. 
29.</LinearLayout>

 

然后是MainActivity

01.public class MainActivity extends Activity implements OnClickListener {
02.TextView openidTextView;
03.TextView nicknameTextView;
04.Button loginButton;
05.ImageView userlogo;
06.private Tencent mTencent;
07.public static QQAuth mQQAuth;
08.public static String mAppid;
09.public static String openidString;
10.public static String nicknameString;
11.public static String TAG="MainActivity";
12.Bitmap bitmap = null;
13.@Override
14.public void onCreate(Bundle savedInstanceState) {
15.super.onCreate(savedInstanceState);
16.setContentView(R.layout.activity_main);
17.//用来登录的Button
18.loginButton=(Button)findViewById(R.id.login);
19.loginButton.setOnClickListener(this);
20.//用来显示OpenID的textView
21.openidTextView=(TextView)findViewById(R.id.user_openid);
22.//用来显示昵称的textview
23.nicknameTextView=(TextView)findViewById(R.id.user_nickname);
24.//用来显示头像的Imageview
25.userlogo=(ImageView)findViewById(R.id.user_logo);
26. 
27.}
28.public void onClick(View v) {
29.// TODO Auto-generated method stub
30.switch (v.getId()) {
31.case R.id.login:
32.LoginQQ();
33.break;
34. 
35.default:
36.break;
37.}
38.}
39.//这里是调用QQ登录的关键代码
40.public void LoginQQ() {
41.//这里的APP_ID请换成你应用申请的APP_ID,我这里使用的是DEMO中官方提供的测试APP_ID 222222
42.mAppid = AppConstant.APP_ID;
43.//第一个参数就是上面所说的申请的APPID,第二个是全局的Context上下文,这句话实现了调用QQ登录
44.mTencent = Tencent.createInstance(mAppid,getApplicationContext());
45./**通过这句代码,SDK实现了QQ的登录,这个方法有三个参数,第一个参数是context上下文,第二个参数SCOPO 是一个String类型的字符串,表示一些权限
46.官方文档中的说明:应用需要获得哪些API的权限,由“,”分隔。例如:SCOPE = “get_user_info,add_t”;所有权限用“all” 
47.第三个参数,是一个事件监听器,IUiListener接口的实例,这里用的是该接口的实现类 */
48.mTencent.login(MainActivity.this,"all"new BaseUiListener());
49. 
50.}
51./**当自定义的监听器实现IUiListener接口后,必须要实现接口的三个方法,
52.* onComplete  onCancel onError
53.*分别表示第三方登录成功,取消 ,错误。*/
54.private class BaseUiListener implements IUiListener {
55. 
56.public void onCancel() {
57.// TODO Auto-generated method stub
58. 
59.}
60.public void onComplete(Object response) {
61.// TODO Auto-generated method stub
62.Toast.makeText(getApplicationContext(), "登录成功"0).show();
63.try {
64.//获得的数据是JSON格式的,获得你想获得的内容
65.//如果你不知道你能获得什么,看一下下面的LOG
66.Log.e(TAG, "-------------"+response.toString());
67.openidString = ((JSONObject) response).getString("openid");
68.openidTextView.setText(openidString);
69.Log.e(TAG, "-------------"+openidString);
70.//access_token= ((JSONObject) response).getString("access_token");              //expires_in = ((JSONObject) response).getString("expires_in");
71.catch (JSONException e) {
72.// TODO Auto-generated catch block
73.e.printStackTrace();
74.}
75./**到此已经获得OpneID以及其他你想获得的内容了
76.QQ登录成功了,我们还想获取一些QQ的基本信息,比如昵称,头像什么的,这个时候怎么办?
77.sdk给我们提供了一个类UserInfo,这个类中封装了QQ用户的一些信息,我么可以通过这个类拿到这些信息
78.如何得到这个UserInfo类呢?  */
79.Q<a href="http://www.it165.net/pro/pkqt/" target="_blank" class="keylink">QT</a>oken qqToken = mTencent.getQ<a href="http://www.it165.net/pro/pkqt/" target="_blank"class="keylink">QT</a>oken();
80.UserInfo info = new UserInfo(getApplicationContext(), <a href="http://www.it165.net/qq/" target="_blank" class="keylink">qq</a>Token);
81.//这样我们就拿到这个类了,之后的操作就跟上面的一样了,同样是解析JSON          
01.info.getUserInfo(new IUiListener() {
02. 
03.public void onComplete(final Object response) {
04.// TODO Auto-generated method stub
05.Log.e(TAG, "---------------111111");
06.Message msg = new Message();
07.msg.obj = response;
08.msg.what = 0;
09.mHandler.sendMessage(msg);
10.Log.e(TAG, "-----111---"+response.toString());
11./**由于图片需要下载所以这里使用了线程,如果是想获得其他文字信息直接
12.* 在mHandler里进行操作
13.*
14.*/
15.new Thread(){
16. 
17.@Override
18.public void run() {
19.// TODO Auto-generated method stub
20.JSONObject json = (JSONObject)response;
21.try {
22.bitmap = Util.getbitmap(json.getString("figureurl_<a href="http://www.it165.net/qq/" target="_blank" class="keylink">qq</a>_2"));
23.catch (JSONException e) {
24.// TODO Auto-generated catch block
25.e.printStackTrace();
26.}
27.Message msg = new Message();
28.msg.obj = bitmap;
29.msg.what = 1;
30.mHandler.sendMessage(msg);
31.}                      
32.}.start();
33.}              
34.public void onCancel() {
35.Log.e(TAG, "--------------111112");
36.// TODO Auto-generated method stub                 
37.}
38.public void onError(UiError arg0) {
39.// TODO Auto-generated method stub
40.Log.e(TAG, "-111113"+":"+arg0);
41.}
42. 
43.});
44. 
45.}
46. 
47.public void onError(UiError arg0) {
48.// TODO Auto-generated method stub
49. 
50.}          
51. 
52.}
53.Handler mHandler = new Handler() {
54. 
55.@Override
56.public void handleMessage(Message msg) {
57.if (msg.what == 0) {
58.JSONObject response = (JSONObject) msg.obj;
59.if (response.has("nickname")) {
60.try {
61.nicknameString=response.getString("nickname");
62. 
63.nicknameTextView.setText(nicknameString);
64.Log.e(TAG, "--"+nicknameString);
65.catch (JSONException e) {
66.// TODO Auto-generated catch block
67.e.printStackTrace();
68.}
69.}
70.}else if(msg.what == 1){
71.Bitmap bitmap = (Bitmap)msg.obj;
72.userlogo.setImageBitmap(bitmap);
73. 
74.}
75.}
76. 
77.};
78. 
79. 
80.}

\

上图是登录Q的返回LOG

\

上图是我们获得腾讯提供的UserInfo返回的LOG

然后是AppConstant.java

1.public class AppConstant {
2.public static String APP_ID="222222";
3.}

然后是Util.java

01.public class Util {
02.public static String TAG="UTIL";
03.public static Bitmap getbitmap(String imageUri) {
04.Log.v(TAG, "getbitmap:" + imageUri);
05.// 显示网络上的图片
06.Bitmap bitmap = null;
07.try {
08.URL myFileUrl = new URL(imageUri);
09.HttpURLConnection conn = (HttpURLConnection) myFileUrl
10..openConnection();
11.conn.setDoInput(true);
12.conn.connect();
13.InputStream is = conn.getInputStream();
14.bitmap = BitmapFactory.decodeStream(is);
15.is.close();
16. 
17.Log.v(TAG, "image download finished." + imageUri);
18.catch (IOException e) {
19.e.printStackTrace();
20.Log.v(TAG, "getbitmap bmp fail---");
21.return null;
22.}
23.return bitmap;
24.}
25.}

 

至此全部代码就在这里了,我们获得了OpenID这个唯一标识最关键的东西,然后看项目中需要登录的接口还需要什么信息,获取到就能实现登陆了。

得意结束。

相关文章推荐

android实现qq第三方登录

  • 2016年09月13日 14:25
  • 3.38MB
  • 下载

Android 实现QQ第三方登录

Android 实现QQ第三方登录 Android 实现QQ第三方登录 首先肯定是去下载SDK和DEMO http://wiki.open.qq.com/wiki...

Android应用之——最新版本SDK V2.4实现QQ第三方登录

最新android SDK V2.4实现QQ第三方登录

Android实现第三方QQ登录

实现QQ登录步骤 1.到QQ互联注册开发者资格地址为:https://connect.qq.com/ 2.然后到管理中心创建移动应用获取APPid 3.下载SDKJar包地址为:http://wik...

android实现qq第三方登录

实现qq第三方登录: 1、布局文件 首先说AndroidManifest.xml文件。 要想通过代码弹出qq的登陆界面,要在AndroidManifest.xml中声明两个Activity,这两个...

Android 实现QQ第三方登录

Android 实现QQ第三方登录 转载请加地址:http://blog.csdn.net/jing110fei/article/details/39159491 在项目中需要实现QQ第三方登录,经过...

android实现第三方QQ登录

使用第三方框架实现登录QQ功能

Android 实现QQ第三方登录

Android 实现QQ第三方登录 转载请加地址:http://blog.csdn.net/jing110fei/article/details/39159491 在项目中需要实现QQ第三方登录,经过...

Android第三方QQ登录、获取个人信息、分享实现

昨天调试了一下午终于成功 第三方QQ登录、获取个人信息,分享 QQ官方API文档写的太乱 并且很多地方没有更新 这里总结一下 方便记录和回看实现结果图 首先进入腾讯开放平台 下载QQ的SDK 地...

Android实现QQ第三方登录

Android 实现QQ第三方登录 在项目中需要实现QQ第三方登录,经过一番努力算是写出来了,现在总结以下,以防以后遗忘,能帮到其他童鞋就更好了。 首先肯定是去下载SDK和DEMO ...
  • vrix
  • vrix
  • 2015年02月07日 16:30
  • 6654
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android实现QQ第三方登录
举报原因:
原因补充:

(最多只允许输入30个字)