欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android调用第三方QQ登录代码分享

程序员文章站 2024-03-03 19:47:22
本文为大家分享了调用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调用第三方登录的详细步骤和思路,希望对大家的学习有所帮助。