Android 调用QQ登录

调用QQ登录

在现在的项目开发,调用第三方登录,几乎是必须的,而调用QQ登录也是必不可少的,这里把相关代码分享出来,希望能拿去就可以用,减少项目开发的时间,希望对大家有用。

1,去QQ开放平台注册帐号(http://open.qq.com/),为应用申请QQ的APP_ID , 并下载相关的jar包,放到工程的lib目录下。

2,在Manifest.xml里注册QQ相关的Activity,代码如下

        <activity
        android:name="com.tencent.connect.common.AssistActivity"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <activity
        android:name="com.tencent.tauth.AuthActivity"
        android:launchMode="singleTask"
        android:noHistory="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="tencent100491239" />
            </intent-filter>
        </activity> 

3,利用QQ提供的相关API去获取相关的OPENID,昵称,图像等资料。这里有一点要注意的是,由于QQ服务器返回OPENID和昵称等其他资料是分两步进行的,而首先返回的              OPENID速度很快,返回昵称等其他资料可能会比较慢,所以在返回OPENID的时候,就可以认为已经调用QQ登录成功,再用异步的方式处理昵称等其他资料信息。以下是代码部 分,已经过项目测试,可直接用(替换相应的APP_ID就可以了)

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.SocketTimeoutException;

import org.apache.http.conn.ConnectTimeoutException;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;

import com.smart.util.BroadcastAction;
import com.smart.util.BroadcastUtil;
import com.smart.util.Constant;
import com.smart.util.ILog;
import com.smart.util.PrefUtil;
import com.smart.util.Prefkey;
import com.tencent.open.HttpStatusException;
import com.tencent.open.NetworkUnavailableException;
import com.tencent.tauth.Constants;
import com.tencent.tauth.IRequestListener;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;
import com.utils.lib.ss.common.ToastHelper;

/**
 * QQ登陆。
 * @author E
 */
public class QqLogin {

	private static QqLogin qqLogin = null;

	public static QqLogin getInstance(){
		if (null == qqLogin) {
			qqLogin = new QqLogin();
		}
		return qqLogin;
	}

	public void login(Activity context , QqLoginListener loginListener){
	    //Constant.QQ_APP_ID 这里要替换成自己申请的APP_ID
		Tencent tencent = Tencent.createInstance(Constant.QQ_APP_ID, context);
		if (null == tencent) {
			ToastHelper.makeText(context, "error cased !");
			return;
		}
		tencent.login(context, "get_user_info", new BaseUiListener(tencent,loginListener));
	}

	class BaseUiListener implements IUiListener{

		Tencent tencent = null;
		QqLoginListener qqLoginListener = null;

		public BaseUiListener(Tencent tencent ,QqLoginListener qqLoginListener) {
			super();
			this.tencent = tencent;
			this.qqLoginListener = qqLoginListener;
		}

		@Override
		public void onComplete(JSONObject values) {
			try {
				String openid = values.getString("openid");
				qqLoginListener.onLoginSuccess(openid);
				tencent.requestAsync(Constants.GRAPH_SIMPLE_USER_INFO, null, Constants.HTTP_GET,
						new BaseApiListener(qqLoginListener) ,null);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		@Override
		public void onError(UiError arg0) {
			qqLoginListener.onLoginFail();
		}

		@Override
		public void onCancel() {
			qqLoginListener.onCancel();
		}
	}

	class BaseApiListener implements IRequestListener{

		 QqLoginListener qqLoginListener = null;

		public BaseApiListener(QqLoginListener qqLoginListener) {
			super();
			this.qqLoginListener = qqLoginListener;
		}
		@Override
		public void onComplete(JSONObject jsonObject, Object object) {
			try {
				ILog.e(jsonObject.toString());
				String nickName = jsonObject.getString("nickname");
				String figureurl_qq_1 = jsonObject.getString("figureurl_qq_2");
				PrefUtil.instance().setPref(Prefkey.THIRD_NICKNAME, nickName);
				PrefUtil.instance().setPref(Prefkey.THIRD_IMAGE, figureurl_qq_1);
				//发送广播到主页去更新
				BroadcastUtil.sendBroadcast(BroadcastAction.UPLOAD_THIRD_INFO);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		@Override
		public void onConnectTimeoutException(ConnectTimeoutException arg0,
				Object arg1) {
		}
		@Override
		public void onHttpStatusException(HttpStatusException arg0, Object arg1) {

		}
		@Override
		public void onIOException(IOException arg0, Object arg1) {

		}
		@Override
		public void onJSONException(JSONException arg0, Object arg1) {

		}
		@Override
		public void onMalformedURLException(MalformedURLException arg0,
				Object arg1) {
		}
		@Override
		public void onNetworkUnavailableException(
				NetworkUnavailableException arg0, Object arg1) {
		}
		@Override
		public void onSocketTimeoutException(SocketTimeoutException arg0,
				Object arg1) {
		}
		@Override
		public void onUnknowException(Exception arg0, Object arg1) {
		}
	}

	/**
	 * 授权完成后,执行一下步的回调
	 */
	public static abstract class QqLoginListener{
		public void onLoginSuccess(String openid){};
		public void onLoginSuccess(String openid, String nickname){};
		public void onLoginFail(){};
		public void onCancel(){};
	}

好了,到里代码部分已经写完,只需要调用login(Activity context , QqLoginListener loginListener)方法就可以了。

时间: 2024-08-29 12:40:52

Android 调用QQ登录的相关文章

Android微博QQ登录授权功能实例

最近开始做公司的小项目,其中就有微博和QQ的用户登录,在这里记录一下,另外QQ的文档非常恶心,鄙视一个! 微博授权登录: 先去微博开放平台申请应用,Android应用的包名和签名填好,然后下载导入SDK. (很多傻瓜教程上都有这些东西的注册流程,不过要是这些你都弄不好就别做开发了,微博的基本上看SDK里的文档和示例基本就没问题了) 直接上代码,其实很简单: // ///////////////////////////////////////////////////////// // // 微博登

Android第三方QQ登录并获取QQ用户信息

首先我们需要去腾讯开放平台申请账号,然后创建应用,地址(http://open.qq.com/) 下载我们应用中所需要的jar包,包括两个 open_sdk_r5509.jar mta_sdk-1.6.2.jar 1.加载完成将jar包放入我们的工程libs目录下 使用eclipse直接设置build path 使用Android studio 需要选中右键 --->add is library 2.做完这步之后我们在AndroidManifest.xml文件中去配置引用 <activity

Android之QQ登录界面

首先过程中碰到的几个问题: 1.对 EditText 进行自定义背景 2.运行时自动 EditText 自动获得焦点 3.在获得焦点时即清空 hint ,而不是输入后清空 4.清空按钮的出现时机(在得到焦点并且有输入内容时) ......... ---  这些问题都有一一解决 --- 以下是代码: 布局 fragment_main(问题2) 1 <!-- android:focusable="true" 2 android:focusableInTouchMode="t

Android调用WebService登录接口

package jklc.gzznprojectjklc; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Locale; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.MarshalBase64; impo

Android开发实现QQ三方登录 标签: android开发qq三方登录

本文分为两个部分:一是QQ的授权部分:二是获取用户的基本信息部分 一.授权部分 1.首先,先去腾讯开放平台获取APP ID和APP KEY(未注册腾讯开发者账号的可能需要先注册账号),获取的过程还是还是非常容易的(不用填写任何的应用程序信息). http://open.qq.com/ 2.下载SDK(http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD) 3.下载好SDK后,将其中的两个jar包(mta-sdk-1.6.2.jar.o

Android 实现QQ第三方登录

在项目中需要实现QQ第三方登录,经过一番努力算是写出来了,现在总结以下,以防以后遗忘,能帮到其他童鞋就更好了. 首先肯定是去下载SDK和DEMO http://wiki.open.qq.com/wiki/mobile/SDK下载 本文是我自己整合后的简单DEMO. 先看下效果图吧 小码哥Html5教程,免费随你看 [点击进入] 24小时阅读30000+,48小时视频下载50000+ H5,JS,CSS,0基础学完独立开发网站/APP! 查 看 小码哥Html5教程,免费随你看 [点击进入] 24

第三方QQ登录不回调 (Android)

// 当你看到这个问题的时候 我假设你已经遇到了Android上QQ登录不回调的问题  且 代码和官方文档一致 (这时候其实仔细看sdk里的示例代码才能发现官方文档和sdk示例代码有出入的) 上代码: private void onQQLoginClick() { // 这里的逻辑和官方文档一样 tencent = Tencent.createInstance(Config.QQ_APP_ID, this); if (!tencent.isSessionValid()) { tencentLog

Android端不通过登录SDK实现QQ登录验证

通常的APP如果要调用QQ登录验证,需要使用QQ提供的登录SDK,但是QQ的SDK使用需要申请APP KEY和APPID,还要向腾讯提交比较繁琐的其它申请,而且如果通过该方法,登录信息全部被QQ掌握.那么是否有方法可以不申请DIY使用QQ登录验证呢. 看了几个QQ移动产品,并未使用这种方式APP KEY的方式进行验证登录,大致确定QQ的产品并没有使用这种接口,而是使用自有的方法直接登录.于是找了一款产品分析了一下. 首先确认了,登录的功能是由oicq这个包来负责的. 接下来分析它的调用接口,通过

QQ登录类

2015-3-31 22:02:09 1. 首先是库文件, 登录->授权->token->openid->获取用户信息 1 class QQ 2 { 3 public $appid = ''; 4 public $appkey = ''; 5 public $scope = 'get_user_info'; //权限用逗号隔开 6 public $callback = ''; 7 8 public $get_auth_code_url = 'https://graph.qq.com