在APP开发过程中,时常会用到第三方账号登录体系。

下面,简要说明QQ的第三方登录体系在Android平台上的运用。

申请APPID

进入QQ互联的官网,http://connect.qq.com/

在管理中心中创建移动应用。



创建完成后,可以得到APPID。



并在下方的协作者测试号中,填写控应用测试用的QQ号码。


导入Jar包

将下载得到的Jar包导入工程,并在AndroidManifest.xml文件中进行注册。

<activityandroid:name="com.tencent.tauth.AuthActivity"android:noHistory="true"android:launchMode="singleTask"><intent-filter><actionandroid:name="android.intent.action.VIEW"/><categoryandroid:name="android.intent.category.DEFAULT"/><categoryandroid:name="android.intent.category.BROWSABLE"/><dataandroid:scheme="tencent100546930"/></intent-filter></activity>


其中,<data android:scheme="tencent100546930" />中的数字需要替换成自己申请得到的APPID。

创建登录接口

所有的SDK接口调用,都会传入一个回调,用以接收SDK返回的调用结果。回调的主要接口有两种:

(1)IUiListener:调用SDK已经封装好的接口时,例如:登录、快速支付登录、应用分享、应用邀请等接口。

(2)IRequestListener:使用requestAsync、request等通用方法调用sdk未封装的接口时,例如上传图片、查看相册等。

在这里创建IUiListener接口实现相应的登录授权操作:

privatevoidonClickLogin(){if(!mTencent.isSessionValid()){IUiListenerlistener=newIUiListener(){/**授权失败的回调*/@OverridepublicvoidonError(UiErrorarg0){//TODOAuto-generatedmethodstubToast.makeText(LoginActivity.this,"授权失败",1000).show();Messagemsg=newMessage();msg.arg1=2;handler.sendMessage(msg);}/**授权成功的回调*/@OverridepublicvoidonComplete(JSONObjectarg0){//TODOAuto-generatedmethodstubToast.makeText(LoginActivity.this,"授权成功",1000).show();Messagemsg=newMessage();msg.what=2;msg.arg1=1;msg.obj=arg0;handler.sendMessage(msg);}/**取消授权的回调*/@OverridepublicvoidonCancel(){//TODOAuto-generatedmethodstubToast.makeText(LoginActivity.this,"取消授权",1000).show();Messagemsg=newMessage();msg.arg1=3;handler.sendMessage(msg);}};mTencent.login(this,SCOPE,listener);}else{mTencent.logout(this);}}


其中,mTencent为QQSDK主要实现类Tencent类的实例。

//Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。//其中APP_ID是分配给第三方应用的appid,类型为String。mTencent=Tencent.createInstance(APP_ID,this.getApplicationContext());


将handler进行实例化

handler=newHandler(this);


并将类实现Callback接口,即可对上述类进行Handler的处理操作。

@OverridepublicbooleanhandleMessage(Messagemsg){//TODOAuto-generatedmethodstubswitch(msg.arg1){case1:{//成功JSONObjectobject=(JSONObject)msg.obj;try{openid=object.getString("openid").toString();sBuilder.append("openid为:"+openid+"\n");access_token=object.getString("access_token").toString();url=url+"?access_token="+access_token+"&oauth_consumer_key="+APP_ID+"&openid="+openid+"&format=json";newMyUrlThread(url.toString(),2,sHandler).start();}catch(JSONExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}break;case2:{//失败Toast.makeText(this,"",Toast.LENGTH_SHORT).show();returnfalse;}case3:{//取消Toast.makeText(this,"",Toast.LENGTH_SHORT).show();returnfalse;}}returnfalse;}


如果授权成功,即可得到返回的Openid。

从而,可以根据Openid调用腾讯所提供的官方接口,实现需要的操作。

接收回调

//应用调用Andriod_SDK接口时,使能成功接收到回调@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){//TODOAuto-generatedmethodstub


应用实例代码

packagecom.test.wotao;importjava.io.IOException;importjava.net.MalformedURLException;importjava.net.URL;importorg.json.JSONException;importorg.json.JSONObject;importcom.tencent.plus.TouchView;importcom.tencent.tauth.IUiListener;importcom.tencent.tauth.Tencent;importcom.tencent.tauth.UiError;importcom.test.util.MyApplication;importcom.test.util.MyThread;importcom.test.util.MyUrlThread;importandroid.annotation.SuppressLint;importandroid.app.Activity;importandroid.content.Intent;importandroid.graphics.drawable.Drawable;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.Handler.Callback;importandroid.os.Message;importandroid.os.StrictMode;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.view.inputmethod.BaseInputConnection;importandroid.widget.Button;importandroid.widget.CheckedTextView;importandroid.widget.ImageView;importandroid.widget.TextView;importandroid.widget.Toast;/***创建时间:2013-10-30APPID:100546930APPKEY:6ff068cfbae8fa0b53f9a3c27f1af321*@author402-9**/publicclassLoginActivityextendsActivityimplementsOnClickListener,Callback{privateButtonlogin_qq;privateTextViewnickname;privateImageViewimage;privateTencentmTencent;privateStringimageurl;Stringurl_qqlogin;privateStringopenid;privateStringaccess_token;privateStringSCOPE="get_simple_userinfo,add_topic";privatestaticfinalStringAPP_ID="100546930";privateStringurl="https://graph.qq.com/user/get_user_info";privateHandlerhandler;privateStringBuildersBuilder=newStringBuilder();privateHandlersHandler=newHandler(){publicvoidhandleMessage(Messagemsg){if(msg.what==2){Stringresult=msg.obj.toString();JSONObjectdata;try{data=newJSONObject(result);Stringret=data.getString("ret");Stringmesssage=data.getString("msg");if(Integer.valueOf(ret)==0){Stringname=data.getString("nickname");sBuilder.append("nickname为:"+name+"\n");Stringgender=data.getString("gender");sBuilder.append("gender为:"+gender+"\n");imageurl=data.getString("figureurl_1");sBuilder.append("imageurl为:"+imageurl+"\n");//image.setImageDrawable(Drawable.createFromStream(newURL(imageurl).openConnection()//.getInputStream(),"src"));url_qqlogin="jiekou.php?code=qq_user&nickname="+name+"&email="+name+"@qq.com&figureurl="+imageurl+"&sex="+gender+"&openid="+openid+"&accesstoken="+access_token;System.out.println("url_qqlogin----"+url_qqlogin);newMyThread(url_qqlogin.toString(),1,qqHandler).start();}}catch(Exceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}System.out.println("sBuilder---"+sBuilder);nickname.setText(sBuilder);}};};privateHandlerqqHandler=newHandler(){publicvoidhandleMessage(Messagemsg){if(msg.what==1){Stringresult=msg.obj.toString();JSONObjectdata;try{data=newJSONObject(result);Stringnickname=data.getString("nickname");Stringmessage=data.getString("msg");sBuilder.append("QQ的nickname为:"+nickname+"\n");sBuilder.append("QQ的message为:"+message+"\n");System.out.println("333==="+sBuilder);Toast.makeText(LoginActivity.this,message,1000).show();}catch(Exceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}nickname.setText(sBuilder);}};};@OverrideprotectedvoidonCreate(BundlesavedInstanceState){//TODOAuto-generatedmethodstubsuper.onCreate(savedInstanceState);setContentView(R.layout.login_qq);handler=newHandler(this);//Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。//其中APP_ID是分配给第三方应用的appid,类型为String。mTencent=Tencent.createInstance(APP_ID,this.getApplicationContext());login_qq=(Button)findViewById(R.id.login_qq);login_qq.setOnClickListener(this);nickname=(TextView)findViewById(R.id.nickname);image=(ImageView)findViewById(R.id.image);}@OverridepublicvoidonClick(Viewv){//TODOAuto-generatedmethodstubswitch(v.getId()){caseR.id.login_qq:onClickLogin();break;}}//应用调用Andriod_SDK接口时,使能成功接收到回调@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){//TODOAuto-generatedmethodstubmTencent.onActivityResult(requestCode,resultCode,data);}privatevoidonClickLogin(){if(!mTencent.isSessionValid()){IUiListenerlistener=newIUiListener(){/**授权失败的回调*/@OverridepublicvoidonError(UiErrorarg0){//TODOAuto-generatedmethodstubToast.makeText(LoginActivity.this,"授权失败",1000).show();Messagemsg=newMessage();msg.arg1=2;handler.sendMessage(msg);}/**授权成功的回调*/@OverridepublicvoidonComplete(JSONObjectarg0){//TODOAuto-generatedmethodstubToast.makeText(LoginActivity.this,"授权成功",1000).show();Messagemsg=newMessage();msg.what=2;msg.arg1=1;msg.obj=arg0;handler.sendMessage(msg);}/**取消授权的回调*/@OverridepublicvoidonCancel(){//TODOAuto-generatedmethodstubToast.makeText(LoginActivity.this,"取消授权",1000).show();Messagemsg=newMessage();msg.arg1=3;handler.sendMessage(msg);}};mTencent.login(this,SCOPE,listener);}else{mTencent.logout(this);}}@OverridepublicbooleanhandleMessage(Messagemsg){//TODOAuto-generatedmethodstubswitch(msg.arg1){case1:{//成功JSONObjectobject=(JSONObject)msg.obj;try{openid=object.getString("openid").toString();sBuilder.append("openid为:"+openid+"\n");access_token=object.getString("access_token").toString();url=url+"?access_token="+access_token+"&oauth_consumer_key="+APP_ID+"&openid="+openid+"&format=json";newMyUrlThread(url.toString(),2,sHandler).start();}catch(JSONExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}break;case2:{//失败Toast.makeText(this,"",Toast.LENGTH_SHORT).show();returnfalse;}case3:{//取消Toast.makeText(this,"",Toast.LENGTH_SHORT).show();returnfalse;}}returnfalse;}}


更多相关文章

  1. Android(安卓)判断系统用户无操作
  2. android记帐本、涂鸦、仿腾讯新闻、仿bilibili、Markdwon便签、
  3. Android中ContentProvider和ContentResolver使用入门
  4. Android中的进程(Process)和线程(Thread)
  5. Android系统操作的50个实用技巧
  6. Android(安卓)ArrayList LinkedList Set HashMap的介绍.
  7. android网络通信之-Http(Android操作HTTP实现与服务器通信)
  8. 详解Android接口Interface的使用和意义
  9. Android官方命令深入分析之bmgr

随机推荐

  1. Android(安卓)UI常用实例 如何实现欢迎界
  2. 谷歌J2ObjC:打破Android应用与iOS应用之间
  3. 开发Android必备的java基础
  4. 第一讲:android socket 网络数据传输
  5. Android实现与SQL连接
  6. Android(安卓)View使用详解
  7. android 使用aapt方法
  8. 能够删除的安卓(Android)系统自带程序详
  9. 开发者必备的十二大Android开发资源
  10. Android(安卓)面向协议编程 体会优雅编程