Android调用第三方QQ登录代码分享
程序员文章站
2024-03-01 21:03:10
本文为大家分享了调用qq登录的相关代码,希望对大家有帮助,减少项目开发的时间,具体内容如下
1、去qq开放平台注册帐号(http://open.qq.com/),为应用申...
本文为大家分享了调用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)方法就可以了。
以上就是android调用第三方登录的详细步骤和思路,希望对大家的学习有所帮助。