Android應用之最新版本SDKV2.4實現QQ第三方登入
為什麼要寫這篇部落格呢?因為,我在做這個第三方登入的時候,找了很多資料,發現要麼就是過時了,要麼就是說的很不清楚,很羅嗦,而且很多都是一些小demo,不是什麼例項,甚至連騰訊官方的文件都有這個問題,文件中很多地方用的不是最新的sdk寫的示例,用最新版本的sdk發現根本沒法達到預期的效果,很多api已經發生了變化,demo還是用的原來的api中的方法,最坑爹是demo下載下來還要一個支援的庫檔案,但是sdk中又沒有提供。。
自己跌跌撞撞,查詢資料,整合,弄了幾個小時,終於把它給整出來了,用在了開發的專案上面,達到了預期的效果,請看效果圖:
下面來說下怎麼實現的,儘量貼上全部程式碼,並解釋清楚
點選登入介面的QQ圖示,觸發呼叫第三方的事件
程式碼如下:
01.
findViewById(R.id.iv_tencent_login).setOnClickListener(
new
OnClickListener()
{
02.
03.
@Override
04.
public
void
onClick(View
v) {
05.
//
TODO Auto-generated method stub
06.
mTencent
= Tencent.createInstance(
07.
AppConst.TENCENT_APP_ID,getApplicationContext());
08.
mTencent.login(E_SigninActivity.
this
,AppConst.TENCENT_SCOPE,
new
BaseUiListener());
09.
}
10.
});
其中 onclick中的幾句程式碼就是呼叫QQ登入的過程
1.
Tencent.createInstance(AppConst.TENCENT_APP_ID,getApplicationContext());
上面的creatInstance方法有兩個引數,第一個引數就是你的APP_ID 這個是要在騰訊開放平臺申請的,具體怎麼申請可以參考開放平臺的介紹。
第二個引數是一個全域性的context上下文
下面來看第二句程式碼
1.
mTencent.login(E_SigninActivity.
this
,AppConst.TENCENT_SCOPE,
new
BaseUiListener());
官方文件中的說明:應用需要獲得哪些API的許可權,由“,”分隔。例如:SCOPE = “get_user_info,add_t”;所有許可權用“all”
第三個引數,是一個事件監聽器,IUiListener介面的例項,這裡用的是該介面的實現類
呼叫login方法後,就會監聽登入事件,登入成功或者失敗後,會回撥監聽器裡面的幾個方法,具體請看下面
01.
private
class
BaseUiListener
implements
IUiListener
{
02.
private
String
nickname;
03.
@Override
04.
public
void
onComplete(Object
response) {
05.
Toast.makeText(getApplicationContext(),
"回撥成功"
,
0
).show();
06.
JSONObject
responseJsonobject = (JSONObject) response;
07.
final
String
openid = responseJsonobject.optString(
"openid"
);
08.
final
String
access_token = responseJsonobject.optString(
"access_token"
);
09.
final
String
expires_in = responseJsonobject.optString(
"expires_in"
);
10.
11.
Log.i(TAG,
response.toString());
12.
qqToken
= mTencent.getQ
Token();
13.
UserInfo
info =
new
UserInfo(getApplicationContext(),
qqToken);
14.
info.getUserInfo(
new
IUiListener()
{
15.
@Override
16.
public
void
onError(UiError
arg0) {
17.
//
TODO Auto-generated method stub
18.
}
19.
20.
@Override
21.
public
void
onComplete(Object
response) {
22.
//
TODO Auto-generated method stub
23.
JSONObject
jsonObject = (JSONObject) response;
24.
nickname
= jsonObject.optString(
"nickname"
);
25.
/**
QQ登入成功後,獲取相關資訊,登入應用*/
26.
loginModel.loginFromWeiboAndQQ(
openid,
access_token,
27.
expires_in,
nickname, BeeFrameworkApp.getInstance().getImei(),
28.
SharedPrefsUtil.getString(E_SigninActivity.
this
,
29.
AppConst.LATITUDE),
SharedPrefsUtil.getString(
30.
E_SigninActivity.
this
,
AppConst.LONGITUDE));
31.
}
32.
33.
@Override
34.
public
void
onCancel()
{
35.
//
TODO Auto-generated method stub
36.
}
37.
});
38.
}
39.
40.
@Override
41.
public
void
onError(UiError
e) {
42.
}
43.
44.
@Override
45.
public
void
onCancel()
{
46.
}
47.
}
當自定義的監聽器實現IUiListener介面後,必須要實現介面的三個方法,onComplete onCancel onError
分別表示第三方登入成功,取消 ,錯誤。
我們在QQ登入成功後要進行的後續操作就是寫在onComplete方法裡面的,在這裡進行開發即可。
onComplete的引數response封裝了一些關鍵的資訊,具體資訊如下圖所示:
一般情況下,QQ登入成功了,我們還想獲取一些QQ的基本資訊,比如暱稱,頭像什麼的,這個時候怎麼辦?
sdk給我們提供了一個類UserInfo,這個類中封裝了QQ使用者的一些資訊,我麼可以通過這個類拿到這些資訊
如何得到這個UserInfo類呢?
1.
QQToken
qqToken = mTencent.getQQToken();
2.
UserInfo
info =
new
UserInfo(getApplicationContext(),
qqToken);
得到了userInfo物件後,呼叫它的getUserInfo(iuilistener)方法就可以得到使用者的基本資訊
01.
info.getUserInfo(
new
IUiListener()
{
02.
@Override
03.
public
void
onError(UiError
arg0) {
04.
//
TODO Auto-generated method stub
05.
}
06.
07.
@Override
08.
public
void
onComplete(Object
response) {
09.
//
TODO Auto-generated method stub
10.
11.
Log.i(TAG,
response.toString());
12.
13.
JSONObject
jsonObject = (JSONObject) response;
14.
nickname
= jsonObject.optString(
"nickname"
);
15.
/**
QQ登入成功後,獲取相關資訊,登入應用*/
16.
loginModel.loginFromWeiboAndQQ(
"qq"
,
openid, access_token,
17.
expires_in,
nickname, BeeFrameworkApp.getInstance().getImei(),
18.
SharedPrefsUtil.getString(E_SigninActivity.
this
,
19.
AppConst.LATITUDE),
SharedPrefsUtil.getString(
20.
E_SigninActivity.
this
,
AppConst.LONGITUDE));
21.
}
22.
23.
@Override
24.
public
void
onCancel()
{
25.
//
TODO Auto-generated method stub
26.
}
27.
});
獲取使用者資訊成功後,同樣會呼叫onComplete方法,它的第一個引數response就封裝了使用者的資訊,它其實是一個json格式的字串,在之前的版本中是json格式的,新版本改為了Object。但是我們還是可以把它強轉成JSONObject 然後取其中的欄位,從下圖可以看出它裡面的所有資訊。
我們暫時只需要nickname暱稱,所以通過optstring得到nickname
1.
JSONObject
jsonObject = (JSONObject) response;
2.
nickname
= jsonObject.optString(
"nickname"
);
得到我們想要的全部資訊後,就可以在oncomplete中進行其他一些登入的操作了
QQ第三方登入的過程基本就是這個樣子了,當然API裡面還有很多其他的方法,response裡面還有很多其他資訊,大家也可以去挖掘,找到自己想要的,為我所用。
本篇部落格到這裡就結束了,希望能幫到你。
相關文章
- Java實現QQ第三方登入Java
- Android-使用Android Studio實現第三方QQ登入Android
- laravel實現第三方qq一鍵登入Laravel
- 簡單實現第三方qq登入和分享
- php使用第三方QQ登入PHP
- QQ模擬登入實現後篇
- qq第三方登入js_sdkJS
- QQ 快速登入協議分析與實現協議
- Laravel5.6 實現第三方登入 微信登入Laravel
- php實現第三方登入,百度第三方登入PHP
- iOS因QQ第三方登入被拒iOS
- qq第三方登入所需appidAPP
- 關於QQ第三方登入的坑
- Python自動登入QQ的實現示例Python
- 使用QQ互聯登入應用
- QQ第三方登入認證流程(乾貨)
- 用 hyperf websocket 實現,類似 qq 單機登入功能Web
- 如何在自己的網站上實現QQ授權登入?網站
- 【網頁登入】QQ 登入、微信登入、微博登入、GitHub 登入網頁Github
- 封裝QQ、微信、微博的第三方登入和分享封裝
- QQ第三方登入例項demo(QQSDK包優化)優化
- Android 第三方登入之新浪微博授權登入Android
- 蘋果稽核被拒——第三方QQ登入的五種情形蘋果
- ios 上qq以及微信上面第三方庫的登入iOS
- 使用第三方APPKey授權 跳轉登入 QQAPP
- 友盟第三方登入精簡版QQ遇到的坑
- 快速實現抖音的分享&登入(android)Android
- Android探索與鞏固(微信QQ第三方登陸填坑)Android
- [API 寫法] QQ 登入、微信登入、Facebook、google、蘋果登入APIGo蘋果
- Java QQ授權第三方登陸Java
- App 掃碼登入 pc 端(不是微信第三方掃碼登入)怎麼實現?APP
- Go 語言實現 QQ 掃碼登陸Go
- 第三方登入 (微博登入 web)Web
- Spring Security原始碼分析三:Spring Social實現QQ社交登入Spring原始碼
- Sass應用之實現主題切換
- 網站 asp.net c# 接入QQ第三方登入的方法網站ASP.NETC#
- 第三方登入/分享最佳實踐
- Android Paint應用之自定義View實現進度條控制元件AndroidAIView控制元件