创建并配置工程
新建工程并导入SDK的jar文件
创建一个android项目,打开project视图模式,在根目录-app-libs的文件夹下添加open-sdk.jar文件和mta_sdk_x.x.x.jar文件,右击open-sdk.jar文件和mta_sdk_x.x.x.jar文件,选取add as library,将jar包导入到项目当中。
SDK下载地址
SDK中包含一个demo、jar、Android API调用说明书和获取签名的apk
配置AndroidManifest
在应用的AndroidManifest.xml增加配置的<application>节点下增加以下配置(注:不配置将会导致无法调用API)
<activity
android:name="com.tencent.tauth.AuthActivity"
android:noHistory="true"
android:launchMode="singleTask" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
//这一个是用来设置你的这个activity可以跳转到浏览器中的
<data android:scheme="tencent222222" />
//这里的222222是指我们的APPID,我这里使用的是腾讯提供的例子,
//因为自己申请开发者应用比较麻烦有需要的朋友们可以自己去处理
</intent-filter>
</activity>
SDK_V2.0引入了AssistActivity,开发者需在androidManifest.xml中注册。代码如下:
<activity android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"
/>
到此为止创建并配置工程完成
实现回调函数
实现登录回调函数
private class BaseUiListener implements IUiListener {
@Override
public void onComplete(Object response) {
//这里官方给出的onComplete的方法的参数是JSONObject类型的
// 但是我们在工程中添加的都是Object的,这里我们就用Object的,因为
// 改成JSONObject的会报错
//将response强制转换成JSONObject
JSONObject result = (JSONObject) response;
//如果返回的数据为空,则退出
if (response == null)
return;
if (result != null && result.length() == 0)
return;
//登录成功,处理返回的数据
doComplete(result);
}
protected void doComplete(JSONObject values) {
}
@Override
public void onError(UiError e) {
}
@Override
public void onCancel() {
}
}
实现获取用户信息的回调函数
private class InfoUiListener implements IUiListener {
@Override
public void onComplete(Object response) {
//这里官方给出的onComplete的方法的参数是JSONObject类型的
// 但是我们在工程中添加的都是Object的,这里我们就用Object的,因为
// 改成JSONObject的会报错
//将response强制转换成JSONObject
JSONObject result = (JSONObject) response;
//如果返回的数据为空,则退出
if (response == null)
return;
if (result != null && result.length() == 0)
return;
//登录成功,处理返回的数据
doComplete(result);
}
protected void doComplete(JSONObject values) {
}
@Override
public void onError(UiError e) {
}
@Override
public void onCancel() {
}
}
这里的代码和上面的代码一样,因为最重要的部分doComplete还没写,在这里特别注意的是doComplete使用protected修饰的,在以后新建的BaseUiListener 和InfoUiListener 对象中需要重写这个方法。
QQ登录并获取用户信息
创建Tencent实例
mTencent = Tencent.createInstance(APP_ID,this.getApplicationContext());
// 其中APP_ID是分配给第三方应用的appid,类型为String。
// 1.4版本:此处需新增参数,传入应用程序的全局context,
//可通过activity的getApplicationContext方法获取
创建登录回调实例
BaseUiListener baseUiListener = new BaseUiListener(){
//重写doComplete方法
@Override
protected void doComplete(JSONObject values) {
try {
//如果ret=-1,则为登录失败
if (values.getInt("ret")==0) {
String token = values.getString(Constants.PARAM_ACCESS_TOKEN);
String expires = values.getString(Constants.PARAM_EXPIRES_IN);
String openID = values.getString(Constants.PARAM_OPEN_ID);
//**下面这两步设置很重要,如果没有设置,返回为空**
mTencent.setOpenId(openID);
mTencent.setAccessToken(token, expires);
//获取用户信息
getuserInfo();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
实现登录
if (!mTencent.isSessionValid())
mTencent.login(this,Scope,loginUiListener);
到此完成QQ的登录
创建UserInfo实例
UserInfo qqInfo = new UserInfo(getContext(),mTencent.getQQToken());
创建获取其用户信息回调实例
InfoUiListener infoUiListener = new InfoUiListener(){
//重写doComplete方法
@Override
protected void doComplete(JSONObject values) {
super.doComplete(values);
//这里用到的是Gson解析Json数据,详细的Gson解析,这不多说,
//我们获取到的信息很多,我选择了一些输出
Gson gson = new Gson();
userData = gson.fromJson(values.toString() , UserData.class);
System.out.println(userData.getCity());
System.out.println(userData.getFigureurl_qq_1());
System.out.println(userData.getGender());
System.out.println(userData.getNickname());
System.out.println(userData.getProvince();
}
};
我们获取到的用户信息包括
{
//is_yellow_year_vip代表的是是否为年费黄砖VIP
"is_yellow_year_vip": "0",
"ret": 0,
//figureurl_qq_1代表的是QQ头像,大小为40
"figureurl_qq_1":
"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/40",
//figureurl_qq_2代表的是QQ头像,大小为40
"figureurl_qq_2":
"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
//nickname代表的是QQ昵称
"nickname": "小罗",
//yellow_vip_level代表的是黄砖的VIP等级
"yellow_vip_level": "0",
"msg": "",
//figureurl_1代表的是QQ空间的头像,大小为50
"figureurl_1":
"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/50",
"vip": "0",
"level": "0",
//figureurl_2代表的是QQ空间头像,大小为100
"figureurl_2":
"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
//is_yellow_vip代表的是是否为黄砖
"is_yellow_vip": "0",
//gender代表的是性别
"gender": "男",
figureurl代表的是QQ空间头像,大小为30
"figureurl":
"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/30"
}
获取用户信息
qqInfo.getUserInfo(InfoUiListener);