Android调用第三方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> <actionandroid:name="android.intent.action.VIEW"/> <categoryandroid:name="android.intent.category.DEFAULT"/> <categoryandroid:name="android.intent.category.BROWSABLE"/> <dataandroid:scheme="tencent100491239"/> </intent-filter> </activity>
3、利用QQ提供的相关API去获取相关的OPENID,昵称,图像等资料。这里有一点要注意的是,由于QQ服务器返回OPENID和昵称等其他资料是分两步进行的,而首先返回的OPENID速度很快,返回昵称等其他资料可能会比较慢,所以在返回OPENID的时候,就可以认为已经调用QQ登录成功,再用异步的方式处理昵称等其他资料信息。以下是代码部分,已经过项目测试,可直接用(替换相应的APP_ID就可以了)
importjava.io.IOException; importjava.net.MalformedURLException; importjava.net.SocketTimeoutException; importorg.apache.http.conn.ConnectTimeoutException; importorg.json.JSONException; importorg.json.JSONObject; importandroid.app.Activity; importcom.smart.util.BroadcastAction; importcom.smart.util.BroadcastUtil; importcom.smart.util.Constant; importcom.smart.util.ILog; importcom.smart.util.PrefUtil; importcom.smart.util.Prefkey; importcom.tencent.open.HttpStatusException; importcom.tencent.open.NetworkUnavailableException; importcom.tencent.tauth.Constants; importcom.tencent.tauth.IRequestListener; importcom.tencent.tauth.IUiListener; importcom.tencent.tauth.Tencent; importcom.tencent.tauth.UiError; importcom.utils.lib.ss.common.ToastHelper; /** *QQ登陆。 *@authorE */ publicclassQqLogin{ privatestaticQqLoginqqLogin=null; publicstaticQqLogingetInstance(){ if(null==qqLogin){ qqLogin=newQqLogin(); } returnqqLogin; } publicvoidlogin(Activitycontext,QqLoginListenerloginListener){ //Constant.QQ_APP_ID这里要替换成自己申请的APP_ID Tencenttencent=Tencent.createInstance(Constant.QQ_APP_ID,context); if(null==tencent){ ToastHelper.makeText(context,"errorcased!"); return; } tencent.login(context,"get_user_info",newBaseUiListener(tencent,loginListener)); } classBaseUiListenerimplementsIUiListener{ Tencenttencent=null; QqLoginListenerqqLoginListener=null; publicBaseUiListener(Tencenttencent,QqLoginListenerqqLoginListener){ super(); this.tencent=tencent; this.qqLoginListener=qqLoginListener; } @Override publicvoidonComplete(JSONObjectvalues){ try{ Stringopenid=values.getString("openid"); qqLoginListener.onLoginSuccess(openid); tencent.requestAsync(Constants.GRAPH_SIMPLE_USER_INFO,null,Constants.HTTP_GET, newBaseApiListener(qqLoginListener),null); }catch(Exceptione){ e.printStackTrace(); } } @Override publicvoidonError(UiErrorarg0){ qqLoginListener.onLoginFail(); } @Override publicvoidonCancel(){ qqLoginListener.onCancel(); } } classBaseApiListenerimplementsIRequestListener{ QqLoginListenerqqLoginListener=null; publicBaseApiListener(QqLoginListenerqqLoginListener){ super(); this.qqLoginListener=qqLoginListener; } @Override publicvoidonComplete(JSONObjectjsonObject,Objectobject){ try{ ILog.e(jsonObject.toString()); StringnickName=jsonObject.getString("nickname"); Stringfigureurl_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(Exceptione){ e.printStackTrace(); } } @Override publicvoidonConnectTimeoutException(ConnectTimeoutExceptionarg0, Objectarg1){ } @Override publicvoidonHttpStatusException(HttpStatusExceptionarg0,Objectarg1){ } @Override publicvoidonIOException(IOExceptionarg0,Objectarg1){ } @Override publicvoidonJSONException(JSONExceptionarg0,Objectarg1){ } @Override publicvoidonMalformedURLException(MalformedURLExceptionarg0, Objectarg1){ } @Override publicvoidonNetworkUnavailableException( NetworkUnavailableExceptionarg0,Objectarg1){ } @Override publicvoidonSocketTimeoutException(SocketTimeoutExceptionarg0, Objectarg1){ } @Override publicvoidonUnknowException(Exceptionarg0,Objectarg1){ } } /** *授权完成后,执行一下步的回调 */ publicstaticabstractclassQqLoginListener{ publicvoidonLoginSuccess(Stringopenid){}; publicvoidonLoginSuccess(Stringopenid,Stringnickname){}; publicvoidonLoginFail(){}; publicvoidonCancel(){}; }
好了,到里代码部分已经写完,只需要调用login(Activitycontext,QqLoginListenerloginListener)方法就可以了。
以上就是Android调用第三方登录的详细步骤和思路,希望对大家的学习有所帮助。