爲何要寫這篇博客呢?因爲。我在作這個第三方登陸的時候,找了很是多資料,發現要麼就是過期了。要麼就是說的很是不清楚。很是羅嗦。而且很是多都是一些小demo,不是什麼實例。甚至連騰訊官方的文檔都有這個問題,文檔中很是多地方用的不是最新的sdk寫的演示樣例,用最新版本號的sdk發現根本無法達到預期的效果。很是多api已經發生了變化,demo仍是用的原來的api中的方法。最坑爹是demo下載下來還要一個支持的庫文件,但是sdk中又沒有提供。。java
本身跌跌撞撞。查找資料,整合,弄了幾個小時,最終把它給整出來了。用在了開發的項目上面。達到了預期的效果。請看效果圖:json
如下來講下怎麼實現的。儘可能貼上全部代碼,並解釋清楚api
點擊登陸界面的QQ圖標。觸發調用第三方的事件ide
代碼例如如下:post
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()); <span style="white-space:pre"> </span>mTencent.login(E_SigninActivity.this,AppConst.TENCENT_SCOPE, new BaseUiListener()); } });
Tencent.createInstance(AppConst.TENCENT_APP_ID,getApplicationContext());這句代碼獲得Tencent實例。咱們就是利用這個實例的login方法來 觸發QQ登陸的。
上面的creatInstance方法有兩個參數,第一個參數就是你的APP_ID 這個是要在騰訊開放平臺申請的,詳細怎麼申請可以參考開放平臺的介紹。ui
第二個參數是一個全局的context上下文this
如下來看第二句代碼spa
mTencent.login(E_SigninActivity.this,AppConst.TENCENT_SCOPE, new BaseUiListener());經過這句代碼,SDK實現了QQ的登陸。這種方法有三個參數。第一個參數是context上下文,第二個參數SCOPO 是一個String類型的字符串,表示一些權限
官方文檔中的說明:應用需要得到哪些API的權限。由「,」分隔。code
好比: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裏面還有很是多其它信息。你們也可以去挖掘。找到本身想要的,爲我所用。
本篇博客到這裏就結束了,但願能幫到你。
友情提示:轉載請註明出處