您的位置:首页 > 移动开发 > Android开发

android腾讯开放平台登陆授权,获取用户信息

2014-05-22 20:53 831 查看
今天研究了一下腾讯的开放平台,要实现授权登录,事先要把mta-sdk-1.6.2.jar和svn2924_open_sdk.jar复制粘贴到项目的libs目录下,并把svn2924_open_sdk.jar这个文件 add to builder path。然后设置一下manifest.xml,在application节点下,加入com.tencent.tauth.AuthActivity和com.tencent.connect.common.AssistActivity,配置如下:

<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" />
<!-- APPID,设置为tencent加你的appId,假如我的appId是123456789,就写成下面那样 -->
<data android:scheme="tencent123456789" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>


 还有两个权限也必须加上,

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


 

下面是一个封装好的类QQLogin。

public class QQLogin {
 private final String TAG = QQLogin.class.getName() + "--->";
 private Activity mActivity;
 private Tencent mTencent;
 public static QQAuth mQQAuth;
 private Map<String, Object> paramsMap = new HashMap<String, Object>();
 
public QQLogin(Activity activity) {
  this.mActivity = activity;
  Log.d(TAG , "start QQ Login...");

 
 /** QQAuth要用全局性的Context来创建 */
  mQQAuth = QQAuth.createInstance(getString(R.string.qq_appid), mActivity.getApplicationContext());
 
 /** Tencent要用当前Context来创建 */
  mTencent = Tencent.createInstance(getString(R.string.qq_appid), mActivity);
 }
 
private String getString(int resId) {
  return mActivity.getString(resId);
 }

 
/**
  * 进入QQ登录授权界面
  */
 public int login() {
  return mTencent.login(mActivity, getString(R.string.SCOPE), qqLoginListener);
 }

/**
  * 授权登录回调
  */
 private QQListener qqLoginListener = new QQListener() {
  @Override
  public void onComplete(JSONObject jsonObject) {
   try {
    /** 根据用户qq号生成的openId */
    paramsMap.put("openId", jsonObject.getString("openid"));
   } catch (JSONException e) {
    e.printStackTrace();
   }
 
  if (userInfoListener != null && mQQAuth != null && mQQAuth.isSessionValid()) {
    new UserInfo(mActivity, mQQAuth.getQQToken()).getUserInfo(userInfoListener);
   }
  } 
};
 
/**
  * 获取用户信息回调
  */
 private QQListener userInfoListener = new QQListener() {
  public void onComplete(JSONObject jsonObject) {
   Logger.d("UserInfo=" + jsonObject);
   try {
    /** 用户的昵称 */
    paramsMap.put("nickname", jsonObject.getString("nickname"));
    /** 用户的性别 */
    paramsMap.put("gender", jsonObject.getString("gender"));
    /** 用户的头像url */
    paramsMap.put("figureurl", jsonObject.getString("figureurl"));
    
    /**回调*/
    if (finishListener!=null) {
     finishListener.onfinish(paramsMap);
    }
   } catch (JSONException e) {
    e.printStackTrace();
   }
  }
 };
 
/**
  * 封装了qq回调接口的类
  *
  * @author Bruce
  *
  */
 public static abstract class QQListener implements IUiListener {
  private String TAG = QQListener.class.getName() + "--->";
  @Override
  public void onCancel() {
   Logger.d(TAG + "onCancel");
  }
  @Override
  @Deprecated
  public void onComplete(Object object) {
   onComplete((JSONObject) object);
  }
  public abstract void onComplete(JSONObject jsonObject);
  @Override
  public void onError(UiError arg0) {
   Logger.d(TAG + "onError");
  }
 }
 
 private onFinishListener finishListener;
 public void setFinishListener(onFinishListener finishListener) {
  this.finishListener = finishListener;
 }
/**自定义qq授权结束时的回调接口*/
 public interface onFinishListener {
  public void onfinish(Map<String, Object> map);
 }
}

在一个MainActivity中调用它,如下:

 

@Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  QQLogin qqLogin = new QQLogin(this);
  qqLogin.setFinishListener(qqLoginFinish);
  qqLogin.login();
}
/**qq授权结束后的回调*/
 private onFinishListener qqLoginFinish=new onFinishListener() {
  
  @Override
  public void onfinish(Map<String, Object> map) {
   System.out.println("--->"+map.get("gender"));
   System.out.println("--->"+map.get("nickname"));
   System.out.println("--->"+map.get("openId"));
  }
 };

Logcat中输出:

05-23 08:34:03 System.out      --->男

05-23 08:34:03 System.out      --->皈依自然

05-23 08:34:03 System.out      --->39532B1ECCD269585622CDA611781D3C

成功得到授权qq的openId,昵称,和性别,当然你也可以根据自己的需要获取相关信息!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息