程序笔记   发布时间:2022-07-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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:scheR_795_11845@e="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)方法就可以了。

 

 

 

 

于:https://blog.csdn.net/eastman520/article/details/46423251

大佬总结

以上是大佬教程为你收集整理的QQ第三方登录,获取用户信息全部内容,希望文章能够帮你解决QQ第三方登录,获取用户信息所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。