創(chuàng)建并配置工程
新建工程并導(dǎo)入SDK的jar文件
創(chuàng)建一個(gè)android項(xiàng)目腻扇,打開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包導(dǎo)入到項(xiàng)目當(dāng)中。
SDK下載地址
SDK中包含一個(gè)demo谷市、jar势木、Android API調(diào)用說明書和獲取簽名的apk
配置AndroidManifest
在應(yīng)用的AndroidManifest.xml增加配置的<application>節(jié)點(diǎn)下增加以下配置(注:不配置將會(huì)導(dǎo)致無法調(diào)用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" />
//這一個(gè)是用來設(shè)置你的這個(gè)activity可以跳轉(zhuǎn)到瀏覽器中的
<data android:scheme="tencent222222" />
//這里的222222是指我們的APPID,我這里使用的是騰訊提供的例子歌懒,
//因?yàn)樽约荷暾?qǐng)開發(fā)者應(yīng)用比較麻煩有需要的朋友們可以自己去處理
</intent-filter>
</activity>
SDK_V2.0引入了AssistActivity啦桌,開發(fā)者需在androidManifest.xml中注冊(cè)。代碼如下:
<activity android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"
/>
到此為止創(chuàng)建并配置工程完成
實(shí)現(xiàn)回調(diào)函數(shù)
實(shí)現(xiàn)登錄回調(diào)函數(shù)
private class BaseUiListener implements IUiListener {
@Override
public void onComplete(Object response) {
//這里官方給出的onComplete的方法的參數(shù)是JSONObject類型的
// 但是我們?cè)诠こ讨刑砑拥亩际荗bject的及皂,這里我們就用Object的甫男,因?yàn)? // 改成JSONObject的會(huì)報(bào)錯(cuò)
//將response強(qiáng)制轉(zhuǎn)換成JSONObject
JSONObject result = (JSONObject) response;
//如果返回的數(shù)據(jù)為空,則退出
if (response == null)
return;
if (result != null && result.length() == 0)
return;
//登錄成功验烧,處理返回的數(shù)據(jù)
doComplete(result);
}
protected void doComplete(JSONObject values) {
}
@Override
public void onError(UiError e) {
}
@Override
public void onCancel() {
}
}
實(shí)現(xiàn)獲取用戶信息的回調(diào)函數(shù)
private class InfoUiListener implements IUiListener {
@Override
public void onComplete(Object response) {
//這里官方給出的onComplete的方法的參數(shù)是JSONObject類型的
// 但是我們?cè)诠こ讨刑砑拥亩际荗bject的板驳,這里我們就用Object的,因?yàn)? // 改成JSONObject的會(huì)報(bào)錯(cuò)
//將response強(qiáng)制轉(zhuǎn)換成JSONObject
JSONObject result = (JSONObject) response;
//如果返回的數(shù)據(jù)為空碍拆,則退出
if (response == null)
return;
if (result != null && result.length() == 0)
return;
//登錄成功若治,處理返回的數(shù)據(jù)
doComplete(result);
}
protected void doComplete(JSONObject values) {
}
@Override
public void onError(UiError e) {
}
@Override
public void onCancel() {
}
}
這里的代碼和上面的代碼一樣慨蓝,因?yàn)樽钪匾牟糠謉oComplete還沒寫,在這里特別注意的是doComplete使用protected修飾的端幼,在以后新建的BaseUiListener 和InfoUiListener 對(duì)象中需要重寫這個(gè)方法礼烈。
QQ登錄并獲取用戶信息
創(chuàng)建Tencent實(shí)例
mTencent = Tencent.createInstance(APP_ID,this.getApplicationContext());
// 其中APP_ID是分配給第三方應(yīng)用的appid,類型為String婆跑。
// 1.4版本:此處需新增參數(shù)此熬,傳入應(yīng)用程序的全局context,
//可通過activity的getApplicationContext方法獲取
創(chuàng)建登錄回調(diào)實(shí)例
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);
//**下面這兩步設(shè)置很重要,如果沒有設(shè)置,返回為空**
mTencent.setOpenId(openID);
mTencent.setAccessToken(token, expires);
//獲取用戶信息
getuserInfo();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
實(shí)現(xiàn)登錄
if (!mTencent.isSessionValid())
mTencent.login(this,Scope,loginUiListener);
到此完成QQ的登錄
創(chuàng)建UserInfo實(shí)例
UserInfo qqInfo = new UserInfo(getContext(),mTencent.getQQToken());
創(chuàng)建獲取其用戶信息回調(diào)實(shí)例
InfoUiListener infoUiListener = new InfoUiListener(){
//重寫doComplete方法
@Override
protected void doComplete(JSONObject values) {
super.doComplete(values);
//這里用到的是Gson解析Json數(shù)據(jù)犀忱,詳細(xì)的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代表的是是否為年費(fèi)黃磚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等級(jí)
"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);