編輯:關於Android編程
為什麼要寫這篇博客呢?因為,我在做這個第三方登錄的時候,找了很多資料,發現要麼就是過時了,要麼就是說的很不清楚,很羅嗦,而且很多都是一些小demo,不是什麼實例,甚至連騰訊官方的文檔都有這個問題,文檔中很多地方用的不是最新的sdk寫的示例,用最新版本的sdk發現根本沒法達到預期的效果,很多api已經發生了變化,demo還是用的原來的api中的方法,最坑爹是demo下載下來還要一個支持的庫文件,但是sdk中又沒有提供。。

自己跌跌撞撞,查找資料,整合,弄了幾個小時,終於把它給整出來了,用在了開發的項目上面,達到了預期的效果,請看效果圖:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGltZyBzcmM9"/uploadfile/Collfiles/20140708/201407080855555.png" alt="\">

下面來說下怎麼實現的,盡量貼上全部代碼,並解釋清楚
點擊登錄界面的QQ圖標,觸發調用第三方的事件
代碼如下:
findViewById(R.id.iv_tencent_login).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mTencent = Tencent.createInstance(
AppConst.TENCENT_APP_ID,getApplicationContext());
mTencent.login(E_SigninActivity.this,AppConst.TENCENT_SCOPE, new BaseUiListener());
}
});Tencent.createInstance(AppConst.TENCENT_APP_ID,getApplicationContext());這句代碼得到Tencent實例,我們就是利用這個實例的login方法來 觸發QQ登錄的。
上面的creatInstance方法有兩個參數,第一個參數就是你的APP_ID 這個是要在騰訊開放平台申請的,具體怎麼申請可以參考開放平台的介紹。
第二個參數是一個全局的context上下文
下面來看第二句代碼
mTencent.login(E_SigninActivity.this,AppConst.TENCENT_SCOPE, new BaseUiListener());通過這句代碼,SDK實現了QQ的登錄,這個方法有三個參數,第一個參數是context上下文,第二個參數SCOPO 是一個String類型的字符串,表示一些權限
官方文檔中的說明:應用需要獲得哪些API的權限,由“,”分隔。例如:SCOPE = “get_user_info,add_t”;所有權限用“all”
第三個參數,是一個事件監聽器,IUiListener接口的實例,這裡用的是該接口的實現類

調用login方法後,就會監聽登錄事件,登錄成功或者失敗後,會回調監聽器裡面的幾個方法,具體請看下面
private class BaseUiListener implements IUiListener {
private String nickname;
@Override
public void onComplete(Object response) {
Toast.makeText(getApplicationContext(), "回調成功", 0).show();
JSONObject responseJsonobject = (JSONObject) response;
final String openid = responseJsonobject.optString("openid");
final String access_token = responseJsonobject.optString("access_token");
final String expires_in = responseJsonobject.optString("expires_in");
Log.i(TAG, response.toString());
QQToken qqToken = mTencent.getQQToken();
UserInfo info = new UserInfo(getApplicationContext(), qqToken);
info.getUserInfo(new IUiListener() {
@Override
public void onError(UiError arg0) {
// TODO Auto-generated method stub
}
@Override
public void onComplete(Object response) {
// TODO Auto-generated method stub
JSONObject jsonObject = (JSONObject) response;
nickname = jsonObject.optString("nickname");
/** QQ登錄成功後,獲取相關信息,登錄應用*/
loginModel.loginFromWeiboAndQQ("qq", openid, access_token,
expires_in, nickname, BeeFrameworkApp.getInstance().getImei(),
SharedPrefsUtil.getString(E_SigninActivity.this,
AppConst.LATITUDE), SharedPrefsUtil.getString(
E_SigninActivity.this, AppConst.LONGITUDE));
}
@Override
public void onCancel() {
// TODO Auto-generated method stub
}
});
}
@Override
public void onError(UiError e) {
}
@Override
public void onCancel() {
}
}分別表示第三方登錄成功,取消 ,錯誤。
我們在QQ登錄成功後要進行的後續操作就是寫在onComplete方法裡面的,在這裡進行開發即可。
onComplete的參數response封裝了一些關鍵的信息,具體信息如下圖所示:

一般情況下,QQ登錄成功了,我們還想獲取一些QQ的基本信息,比如昵稱,頭像什麼的,這個時候怎麼辦?
sdk給我們提供了一個類UserInfo,這個類中封裝了QQ用戶的一些信息,我麼可以通過這個類拿到這些信息
如何得到這個UserInfo類呢?
QQToken qqToken = mTencent.getQQToken(); UserInfo info = new UserInfo(getApplicationContext(), qqToken);
得到了userInfo對象後,調用它的getUserInfo(iuilistener)方法就可以得到用戶的基本信息
info.getUserInfo(new IUiListener() {
@Override
public void onError(UiError arg0) {
// TODO Auto-generated method stub
}
@Override
public void onComplete(Object response) {
// TODO Auto-generated method stub
Log.i(TAG, response.toString());
JSONObject jsonObject = (JSONObject) response;
nickname = jsonObject.optString("nickname");
/** QQ登錄成功後,獲取相關信息,登錄應用*/
loginModel.loginFromWeiboAndQQ("qq", openid, access_token,
expires_in, nickname, BeeFrameworkApp.getInstance().getImei(),
SharedPrefsUtil.getString(E_SigninActivity.this,
AppConst.LATITUDE), SharedPrefsUtil.getString(
E_SigninActivity.this, AppConst.LONGITUDE));
}
@Override
public void onCancel() {
// TODO Auto-generated method stub
}
});
我們暫時只需要nickname昵稱,所以通過optstring得到nickname
JSONObject jsonObject = (JSONObject) response;
nickname = jsonObject.optString("nickname");
QQ第三方登錄的過程基本就是這個樣子了,當然API裡面還有很多其他的方法,response裡面還有很多其他信息,大家也可以去挖掘,找到自己想要的,為我所用。
本篇博客到這裡就結束了,希望能幫到你。
友情提示:轉載請注明出處
Android自定義UI手勢密碼終結版
之前寫過3篇手勢密碼的demo,不過沒有集成到真實的企業項目中,這幾天正好領到一個手勢密碼項目,昨天剛好弄完,今天抽空整理下,目前還沒有完善,有一些地方需要更改,不過基本
百度專車教程 百度專車詳細使用指南
百度專車是百度地圖最新推出的一項提供高品質用車的服務。百度憑借百度地圖龐大的用戶群體,開展這項專車服務,提供從經濟型到奢華型共5大類20余種車型供用戶選擇,
android學習二(Activity)
前面我簡單的介紹了android的一些基礎知識,當作熱身吧,接下來接觸android的四大組件的activity活動。 1.活動Activity是是一種保護用戶界面的組件
淺談Android程序與JavaScript腳本的交互
我們都知道,手機時代的來臨的主要標志是啥?能夠方便的接入互聯網!互聯網展現給我們的方式一般都是網頁,網頁中又必不可少的擁有javascript,所以說,android提供