qq平台登录

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

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

申请APPID

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

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

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

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

导入Jar包

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

[html] view
plain
copy

  1.       <activity  
  2.        android:name="com.tencent.tauth.AuthActivity"  
  3.        android:noHistory="true"  
  4.        android:launchMode="singleTask" >  
  5.     <intent-filter>  
  6.             <action android:name="android.intent.action.VIEW" />  
  7.             <category android:name="android.intent.category.DEFAULT" />  
  8.             <category android:name="android.intent.category.BROWSABLE" />  
  9.             <data android:scheme="tencent100546930" />  
  10.      </intent-filter>  
  11. </activity>  

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

创建登录接口

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

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

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

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

[java] view
plain
copy

  1.  private void onClickLogin() {  
  2.      if (!mTencent.isSessionValid()) {  
  3.          IUiListener listener = new IUiListener() {  
  4.             /** 授权失败的回调*/  
  5.     @Override  
  6.     public void onError(UiError arg0) {  
  7.         // TODO Auto-generated method stub  
  8.         Toast.makeText(LoginActivity.this, "授权失败", 1000).show();  
  9.         Message msg = new Message();  
  10.         msg.arg1 = 2;  
  11.         handler.sendMessage(msg);     
  12.     }  
  13.     /** 授权成功的回调*/  
  14.     @Override  
  15.     public void onComplete(JSONObject arg0) {  
  16.         // TODO Auto-generated method stub  
  17.         Toast.makeText(LoginActivity.this, "授权成功", 1000).show();  
  18.         Message msg = new Message();  
  19.         msg.what = 2;  
  20.         msg.arg1 = 1;  
  21.         msg.obj = arg0;  
  22.         handler.sendMessage(msg);  
  23.     }  
  24.     /** 取消授权的回调*/  
  25.     @Override  
  26.     public void onCancel() {  
  27.         // TODO Auto-generated method stub  
  28.         Toast.makeText(LoginActivity.this, "取消授权", 1000).show();  
  29.         Message msg = new Message();  
  30.         msg.arg1 = 3;  
  31.         handler.sendMessage(msg);     
  32.     }  
  33. };  
  34.          mTencent.login(this, SCOPE, listener);  
  35.      } else {  
  36.          mTencent.logout(this);  
  37.      }  
  38.  }  

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

[java] view
plain
copy

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

将handler进行实例化

[java] view
plain
copy

  1. handler = new Handler(this);  

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

[java] view
plain
copy

  1. @Override  
  2. public boolean handleMessage(Message msg) {  
  3.     // TODO Auto-generated method stub  
  4.     switch (msg.arg1) {  
  5.         case 1: { // 成功  
  6.             JSONObject object = (JSONObject) msg.obj;  
  7.             try {  
  8.                 openid = object.getString("openid").toString();  
  9.                 sBuilder.append("openid为:"+openid+"\n");  
  10.                 access_token = object.getString("access_token").toString();  
  11.                 url = url + "?access_token="+access_token+"&oauth_consumer_key="+APP_ID+  
  12.                         "&openid="+openid+"&format=json";  
  13.                 new MyUrlThread(url.toString(), 2,sHandler).start();  
  14.             } catch (JSONException e) {  
  15.                 // TODO Auto-generated catch block  
  16.                 e.printStackTrace();  
  17.             }  
  18.         }  
  19.         break;  
  20.         case 2: { // 失败  
  21.             Toast.makeText(this, "", Toast.LENGTH_SHORT).show();  
  22.             return false;  
  23.         }  
  24.         case 3: { // 取消  
  25.             Toast.makeText(this, "", Toast.LENGTH_SHORT).show();  
  26.             return false;  
  27.         }  
  28.     }  
  29.     return false;  
  30. }  

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

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

接收回调

[java] view
plain
copy

  1. //应用调用Andriod_SDK接口时,使能成功接收到回调  
  2. @Override  
  3. protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  4.     // TODO Auto-generated method stub  
  5.       

应用实例代码

[java] view
plain
copy

  1. package com.test.wotao;  
  2.   
  3.   
  4. import java.io.IOException;  
  5. import java.net.MalformedURLException;  
  6. import java.net.URL;  
  7.   
  8. import org.json.JSONException;  
  9. import org.json.JSONObject;  
  10.   
  11.   
  12. import com.tencent.plus.TouchView;  
  13. import com.tencent.tauth.IUiListener;  
  14. import com.tencent.tauth.Tencent;  
  15. import com.tencent.tauth.UiError;  
  16. import com.test.util.MyApplication;  
  17. import com.test.util.MyThread;  
  18. import com.test.util.MyUrlThread;  
  19.   
  20. import android.annotation.SuppressLint;  
  21. import android.app.Activity;  
  22. import android.content.Intent;  
  23. import android.graphics.drawable.Drawable;  
  24. import android.os.Bundle;  
  25. import android.os.Handler;  
  26. import android.os.Handler.Callback;  
  27. import android.os.Message;  
  28. import android.os.StrictMode;  
  29. import android.view.View;  
  30. import android.view.View.OnClickListener;  
  31. import android.view.inputmethod.BaseInputConnection;  
  32. import android.widget.Button;  
  33. import android.widget.CheckedTextView;  
  34. import android.widget.ImageView;  
  35. import android.widget.TextView;  
  36. import android.widget.Toast;  
  37. /** 
  38.  * 创建时间:2013-10-30 
  39. APP ID:100546930 
  40. APP KEY:6ff068cfbae8fa0b53f9a3c27f1af321 
  41.  * @author 402-9 
  42.  * 
  43.  */  
  44.   
  45. public class LoginActivity extends Activity implements OnClickListener,Callback{  
  46.     private Button login_qq;  
  47.     private TextView nickname;  
  48.     private ImageView image;  
  49.     private Tencent mTencent;  
  50.     private String imageurl;  
  51.     String url_qqlogin;  
  52.     private String openid;  
  53.     private String access_token;  
  54.     private String SCOPE = "get_simple_userinfo,add_topic";  
  55.     private static final String APP_ID = "100546930";  
  56.     private String url = "https://graph.qq.com/user/get_user_info";  
  57.     private Handler handler;  
  58.     private StringBuilder sBuilder = new StringBuilder();  
  59.     private Handler sHandler = new Handler(){  
  60.         public void handleMessage(Message msg) {  
  61.             if (msg.what == 2) {  
  62.                 String result = msg.obj.toString();  
  63.                 JSONObject data;  
  64.                 try {  
  65.                     data = new JSONObject(result);  
  66.                     String ret = data.getString("ret");  
  67.                     String messsage = data.getString("msg");  
  68.                     if (Integer.valueOf(ret) == 0) {  
  69.                         String name = data.getString("nickname");  
  70.                         sBuilder.append("nickname为:"+name+"\n");  
  71.                         String gender = data.getString("gender");  
  72.                         sBuilder.append("gender为:"+gender+"\n");  
  73.                         imageurl = data.getString("figureurl_1");  
  74.                         sBuilder.append("imageurl为:"+imageurl+"\n");  
  75. //                      image.setImageDrawable(Drawable.createFromStream(new URL(imageurl).openConnection()  
  76. //                      .getInputStream(), "src"));  
  77.                         url_qqlogin = "jiekou.php?code=qq_user&nickname="+name+"&email="+name+  
  78.                                 "@qq.com&figureurl="+imageurl+"&sex="+gender+  
  79.                                 "&openid="+openid+"&accesstoken="+access_token;  
  80.                         System.out.println("url_qqlogin----"+url_qqlogin);  
  81.                         new MyThread(url_qqlogin.toString(), 1,qqHandler).start();  
  82.                     }  
  83.   
  84.                 } catch (Exception e) {  
  85.                     // TODO Auto-generated catch block  
  86.                     e.printStackTrace();  
  87.                 }  
  88.   
  89.                 System.out.println("sBuilder---"+sBuilder);  
  90.                 nickname.setText(sBuilder);  
  91.                   
  92.             }  
  93.         };  
  94.     };  
  95.     private Handler qqHandler = new Handler(){  
  96.         public void handleMessage(Message msg) {  
  97.             if (msg.what==1) {  
  98.                 String result = msg.obj.toString();  
  99.                 JSONObject data;  
  100.                 try {  
  101.                     data = new JSONObject(result);  
  102.                     String nickname = data.getString("nickname");  
  103.                     String message = data.getString("msg");  
  104.                     sBuilder.append("QQ的nickname为:"+nickname+"\n");  
  105.                     sBuilder.append("QQ的message为:"+message+"\n");  
  106.                     System.out.println("333==="+sBuilder);  
  107.                     Toast.makeText(LoginActivity.this, message, 1000).show();  
  108.                 } catch (Exception e) {  
  109.                     // TODO Auto-generated catch block  
  110.                     e.printStackTrace();  
  111.                 }  
  112.                 nickname.setText(sBuilder);  
  113.             }  
  114.         };  
  115.     };  
  116.     @Override  
  117.     protected void onCreate(Bundle savedInstanceState) {  
  118.         // TODO Auto-generated method stub  
  119.         super.onCreate(savedInstanceState);  
  120.         setContentView(R.layout.login_qq);  
  121.         handler = new Handler(this);  
  122.         // Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。  
  123.         // 其中APP_ID是分配给第三方应用的appid,类型为String。  
  124.         mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());  
  125.         login_qq = (Button) findViewById(R.id.login_qq);  
  126.         login_qq.setOnClickListener(this);  
  127.         nickname = (TextView) findViewById(R.id.nickname);  
  128.         image = (ImageView) findViewById(R.id.image);  
  129.           
  130.     }  
  131.     @Override  
  132.     public void onClick(View v) {  
  133.         // TODO Auto-generated method stub  
  134.         switch (v.getId()) {  
  135.             case R.id.login_qq:  
  136.                 onClickLogin();  
  137.                 break;  
  138.         }  
  139.     }  
  140.     //应用调用Andriod_SDK接口时,使能成功接收到回调  
  141.     @Override  
  142.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  143.         // TODO Auto-generated method stub  
  144.          mTencent.onActivityResult(requestCode, resultCode, data);  
  145.     }  
  146.     private void onClickLogin() {  
  147.         if (!mTencent.isSessionValid()) {  
  148.             IUiListener listener = new IUiListener() {  
  149.                 /** 授权失败的回调*/  
  150.                 @Override  
  151.                 public void onError(UiError arg0) {  
  152.                     // TODO Auto-generated method stub  
  153.                     Toast.makeText(LoginActivity.this, "授权失败", 1000).show();  
  154.                     Message msg = new Message();  
  155.                     msg.arg1 = 2;  
  156.                     handler.sendMessage(msg);     
  157.                 }  
  158.                 /** 授权成功的回调*/  
  159.                 @Override  
  160.                 public void onComplete(JSONObject arg0) {  
  161.                     // TODO Auto-generated method stub  
  162.                     Toast.makeText(LoginActivity.this, "授权成功", 1000).show();  
  163.                     Message msg = new Message();  
  164.                     msg.what = 2;  
  165.                     msg.arg1 = 1;  
  166.                     msg.obj = arg0;  
  167.                     handler.sendMessage(msg);  
  168.                 }  
  169.                 /** 取消授权的回调*/  
  170.                 @Override  
  171.                 public void onCancel() {  
  172.                     // TODO Auto-generated method stub  
  173.                     Toast.makeText(LoginActivity.this, "取消授权", 1000).show();  
  174.                     Message msg = new Message();  
  175.                     msg.arg1 = 3;  
  176.                     handler.sendMessage(msg);     
  177.                 }  
  178.             };  
  179.             mTencent.login(this, SCOPE, listener);  
  180.         } else {  
  181.             mTencent.logout(this);  
  182.         }  
  183.     }  
  184.       
  185.     @Override  
  186.     public boolean handleMessage(Message msg) {  
  187.         // TODO Auto-generated method stub  
  188.         switch (msg.arg1) {  
  189.             case 1: { // 成功  
  190.                 JSONObject object = (JSONObject) msg.obj;  
  191.                 try {  
  192.                     openid = object.getString("openid").toString();  
  193.                     sBuilder.append("openid为:"+openid+"\n");  
  194.                     access_token = object.getString("access_token").toString();  
  195.                     url = url + "?access_token="+access_token+"&oauth_consumer_key="+APP_ID+  
  196.                             "&openid="+openid+"&format=json";  
  197.                     new MyUrlThread(url.toString(), 2,sHandler).start();  
  198.                 } catch (JSONException e) {  
  199.                     // TODO Auto-generated catch block  
  200.                     e.printStackTrace();  
  201.                 }  
  202.             }  
  203.             break;  
  204.             case 2: { // 失败  
  205.                 Toast.makeText(this, "", Toast.LENGTH_SHORT).show();  
  206.                 return false;  
  207.             }  
  208.             case 3: { // 取消  
  209.                 Toast.makeText(this, "", Toast.LENGTH_SHORT).show();  
  210.                 return false;  
  211.             }  
  212.         }  
  213.         return false;  
  214.     }  
  215. }  
时间: 2024-10-27 12:30:38

qq平台登录的相关文章

微信公众平台登录界面

  微信公众平台登录界面是很多朋友在问的,想必是哪个地址有点难记,这里最好的方法就是保存一下,浏览器有个收藏功能,很方便的,这里提供一下微信公众平台登录界面地址. 微信公众平台登录界面:https://mp.weixin.qq.com/ 为了方便,最好是直接收藏下来,你可以在浏览器一般是右上角找到收藏按钮. 或者直接右键选择收藏,以后就能非常方便的打开,而不再需要去百度搜索了. 关于微信公众平台登录界面就了解到这里,希望对大家有帮助.

微信公众号将推第三方平台登录授权,无需从平台网址登陆

微信公众号将推第三方平台登录授权,无需从平台网址登陆11月3日消息,在2014腾讯全球合作伙伴 大会上,微信开放平台助理总经理曾鸣表示,微信将面对第三方平台开放专门的 针对性的接口,,即公众号登录的授权接口.以前需要通过公众号平台网址(mp.weixin.qq.com)来登录公众号平台,而开放微信第三方公众号登录授权后,可以让公众号在第三方平台直接登录.据了解,第三方平台可以在微信官方平台上申请,做一个简单公司资质的认证,就可以获取这个授权接口.此外,曾鸣还介绍了微信开放平台另外两个升级:卡包和

求QQ微博登录和发微博的C#代码。

问题描述 求QQ微博登录和发微博的C#代码. 解决方案 解决方案二:???问腾讯解决方案三:自己分析分析看~~[align=center]*****************************************本内容使用回复每天回帖即可得10分可用分!*****************************************[/align]解决方案四:该回复于2011-03-17 10:29:22被版主删除解决方案五:我顶顶顶解决方案六:每天回帖即可获得10分可用分!解决方案七

微信公众平台登录初级使用教程分享

给各位微信软件的使用者们来详细的解析分享一下微信公众平台登录初级使用的教程. 教程分享: 1.私人号与公众号的关系: 微信公众平台不能直接使用个人已有的微信私人号登录.需要另外使用未注册过微信号的QQ号才能注册. 为什么微信要把私人号和公众号分开? 可能,许多人会有这种疑问:为什么公众号不能使用已有私人号登录?为什么公众号不能在手机客户端上登录?其实,早期的时候,微信并未区分私人号和公众号.公众号也是可以在手机上登录的.但是,公众号在手机登录使用的时候会遇到许多问题.比如信息的过于频繁会导致手机

iOS QQ第三方登录实现_IOS

本文实例为大家分享了iOS QQ第三方登录实现代码,供大家参考,具体内容如下 一.准备工作 1.到QQ开放平台(http://connect.qq.com/ )注册成为开发者,申请appkey, 2.在URL Types中添加QQ的AppID,其格式为:"tencent" + AppID    例如tencent1104463316 二.配置AppDelegate.m 1.导入<TencentOpenAPI/QQApiInterface.h> 和<TencentOpe

thinkPHP5项目中实现QQ第三方登录功能

本文实例讲述了thinkPHP5项目中实现QQ第三方登录功能.分享给大家供大家参考,具体如下: 最近用thinkPHP 5框架做了一个婚纱店的项目,在开发过程中需要用到第三方登录,腾讯官方给的案例是几个文件相互包含实现的,放到tp5里面很悲催的发现在控制器中不能通过include或者require完成预期功能,想要用腾讯官方封的类就必须对其进行修改,修改如下: 1. 找到官方SDK里面的核心文件 框架外使用的时候是include 'qqConnectAPI.php',打开这个文件可以看到它是包含

双十一微信公众平台登录不了?看这边

双十一就应该买买买,剁手族们给马云贡献几百个亿现在还不得而知,但是腾讯是不会当神队友的,这不,微信公众平台登录二维码就显示不了,那些想要推出促销活动的公众号运营者要哭一会儿了,今天可能就没法群发图文消息引诱购物了,多影响销量啊! 别急,方法还是有的! 最新登录方法: 1.登录微信电脑版,在微信电脑版的"公众号安全助手"登录手机端,进入手机端后台,关闭窗口. 2.在微信电脑版访问https://mp.weixin.qq.com即可     实在登录不了的朋友们,往下看   最新消息:10

android开发-安卓qq接入登录可以获得qq号码吗?

问题描述 安卓qq接入登录可以获得qq号码吗? 安卓qq接入登录后获取信息,可以获得qq号码吗?求助,急急急急急急 解决方案 第三方qq登录 安卓开发 解决方案二: 能获取昵称.........

用VBScript制作QQ自动登录的脚本代码

有时候我们在个人电脑上,每次输入密码比较麻烦,可以自动登录,但如果qq账号多了,就可以使用这个脚本了   一直用的是狂人版的QQ,也用它附赠的自动登录器很久了,不过最近一版的狂人QQ不知为何取消了自动登录组件.好在QQ2009已经能够同时记住多个号码的密码,虽然要多点击几下,但依然能够实现免输入密码登录. 谁知最近不知道电脑发了什么疯,每隔一段时间,QQ记住的密码就会被清空.我的两个QQ号密码都设置得比较复杂,每次登录要输入两遍密码实在是件痛苦的事情,于是决定自制一个登录器. 在网上找了许久,发