Android实现QQ登录功能

本文分为两个部分:一是QQ的授权部分;二是获取用户的基本信息部分

一、授权部分

1.首先,先去腾讯开放平台获取APP ID和APP KEY(未注册腾讯开发者账号的可能需要先注册账号),获取的过程还是还是非常容易的(不用填写任何的应用程序信息)。

http://open.qq.com/

在AndroidManifest.xml的application标签中添加一下两个activity。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 注册SDKActivity -->
 <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="tencent开放平台获取的APPID" /> 
  </intent-filter> 
 </activity> 
 <activity android:name="com.tencent.connect.common.AssistActivity"
  android:theme="@android:style/Theme.Translucent.NoTitleBar"
  android:screenOrientation="portrait"/> 

 Activity中的代码

public class MainActivity extends Activity { 
 private static final String TAG = "MainActivity"; 
 private static final String APP_ID = "官方获取的APPID ";//官方获取的APPID 
 private Tencent mTencent; 
 private BaseUiListener mIUiListener; 
 private UserInfo mUserInfo; 
 
  
 @Override
 protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.activity_main); 
  //传入参数APPID和全局Context上下文 
  mTencent = Tencent.createInstance(APP_ID, MainActivity.this.getApplicationContext()); 
  
//QQ登录按钮点击事件
  login.setOnClickListener(new View.OnClickListener() { 
   @Override
   public void onClick(View v) { 
    mIUiListener = new BaseUiListener(); 
    //all表示获取所有权限 
    mTencent.login(MainActivity.this,"all", mIUiListener); 
    mUserInfo = new UserInfo(MainActivity.this, mTencent.getQQToken()); //获取用户信息 
    mUserInfo.getUserInfo(mIUiListener); 
   } 
  }); 
 } 
  

 /** 
  * 自定义监听器实现IUiListener接口后,需要实现的3个方法 
  * onComplete完成 onError错误 onCancel取消 
  */
 private class BaseUiListener implements IUiListener { 
  
  @Override
  public void onComplete(Object response) { 
   Toast.makeText(MainActivity.this, "授权成功", Toast.LENGTH_SHORT).show(); 
   Log.e(TAG, "response:" + response); 
   JSONObject obj = (JSONObject) response; 
   try { 
    String openID = obj.getString("openid"); 
    String accessToken = obj.getString("access_token"); 
    String expires = obj.getString("expires_in"); 
    mTencent.setOpenId(openID); 
    mTencent.setAccessToken(accessToken,expires); 
    QQToken qqToken = mTencent.getQQToken(); 
    mUserInfo = new UserInfo(getApplicationContext(),qqToken); 
    mUserInfo.getUserInfo(new IUiListener() { 
     @Override
     public void onComplete(Object response) { 
      Log.e(TAG,"登录成功"+response.toString()); 
      if(response == null){ 
       return; 
      } 
      try { 
       JSONObject jo = (JSONObject) response; 
        Toast.makeText(MainActivity.this, "登录成功", 
          Toast.LENGTH_LONG).show(); 
       String nickName = jo.getString("nickname"); 
       String figureurl_1= jo.getString("figureurl_1"); 
       name.setText(nickName); 
       ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(MainActivity.this).build(); 
       ImageLoader.getInstance().init(configuration); 
       ImageLoader.getInstance().displayImage(figureurl_1,img); 
      } catch (Exception e) { 
       // TODO: handle exception 
      } 
     } 
  
     @Override
     public void onError(UiError uiError) { 
      Log.e(TAG,"登录失败"+uiError.toString()); 
     } 
  
     @Override
     public void onCancel() { 
      Log.e(TAG,"登录取消"); 
  
     } 
    }); 
   } catch (JSONException e) { 
    e.printStackTrace(); 
   } 
  } 
  
  @Override
  public void onError(UiError uiError) { 
   Toast.makeText(MainActivity.this, "授权失败", Toast.LENGTH_SHORT).show(); 
  
  } 
  
  @Override
  public void onCancel() { 
   Toast.makeText(MainActivity.this, "授权取消", Toast.LENGTH_SHORT).show(); 
  
  } 
  
 } 
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
  if(requestCode == Constants.REQUEST_LOGIN){ 
   Tencent.onActivityResultData(requestCode,resultCode,data,mIUiListener); 
  } 
  super.onActivityResult(requestCode, resultCode, data); 
 } 
} 

 

 

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值