QQ 微信 新浪微博 第三方登錄最快速

在本文之前請先去官方下載SDK ?如果你做了分享那就不需要了;

注:你做了分享的意思 是你在清單文件下面已經注冊了所需要的Activity.

官方的文檔確實寫的很清晰,但是并不太適合我們的快節奏,你只需要將我下面的代碼成功寫入你的APP 第三方登錄就完成了

第三方登錄注意問題

一、QQ

1、100044錯誤 確保簽名文件正確

2、修改MD5 簽名

原因:簽名問題導致。

解決方法:1、檢查代碼里配置的appid是否正確。2、修改簽名。

簽名修改操作步驟:對應移動應用的開發者可以進入QQ互聯官網https://connect.qq.com/index.html? ? =》應用管理=》移動應用=》關聯騰訊開放平臺,根據提示關聯創建出現問題的移動應用,修改/添加相應的簽名或者包名。

注:1、獲取對應報錯包名所用的簽名信息進行修改或者添加。

2、若QQ互聯里已有對應的移動應用,可直接改簽名;若無對應移動應用,要先關聯開放平臺創建一個同APP ID的應用進行包名/簽名修改或者添加

3、包名、簽名需小寫,去掉冒號

APP 使用步驟:

在登陸的onCreate執行 1

1、Tencent 注冊? mTencent = Tencent.createInstance(Constant.APP_ID_QQ, getApplicationContext());

2、 // 當他點擊QQLOGO 你無法確定他到底是要用哪一個賬號

mTencent.login(this, "all", mBaseUiListener); 不需要做其他存儲判斷因為你無法知道他是否要切換其他QQ

/**

* QQ回調的Listener

*/

private BaseUiListener mBaseUiListener = new BaseUiListener();

private class BaseUiListener implements IUiListener {

@Override

public void onComplete(Object o) {

LogUtils.i("QQ授權登錄回調");

String access_token = ((JSONObject) o).optString("access_token");

String openid = ((JSONObject) o).optString("openid");

String expires_in = ((JSONObject) o).optString("expires_in");

//? ? ? ? ? ? TestLogin(s,2);

thirdPartLogin(access_token, openid, 2); // 這里是將數據傳給服務器生成APP對應的賬號

// 下面的保存是為了做自動登陸做準備

mTencent.setAccessToken(access_token, expires_in);

mTencent.setOpenId(openid);

( 其實這里這樣做沒有意義,當你的程序徹底關閉之后mTencent會重現創建,你在其他地方取到的至將會報空,所以可以考慮用微博的方式)

LogUtils.i(o.toString());

}

@Override

public void onError(UiError uiError) {

LogUtils.i(uiError.toString());

}

@Override

public void onCancel() {

LogUtils.i("取消了");

}

}

3、授權登陸之后的接受回調

super.onActivityResult(requestCode, resultCode, data);

switch (type){

case TYPE_QQ:

mTencent.onActivityResultData(requestCode, resultCode, data, mBaseUiListener);

return;

case TYPE_WEIBO:

if (mSsoHandler != null) {

mSsoHandler.authorizeCallBack(requestCode, resultCode, data);

}

return;

//? ? ? ? ? ? default:

//? ? ? ? ? ? ? ? AppContext.getApp().showToastCenterShort("try again later");

}

4、(請求服務器登陸成功之后將信息填到APP) 并調用 微博也要執行這個;

setResult(RESULT_OK);

finish(); 回到跳轉到登陸之前的activity? 注意 邏輯不好處理的時候用laucher moder singletask

二、微博登陸

在登陸的onCreate執行 1

1、 mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(getApplicationContext(), Constant.APP_KEY_SINA);

mWeiboShareAPI.registerApp();

2、點擊了微博登錄按鈕

mAuthInfo = new AuthInfo(LoginActivity.this, Constant.APP_KEY_SINA, Constant.REDIRECT_URL, Constant.SCOPE);

mSsoHandler = new SsoHandler(LoginActivity.this, mAuthInfo);

mSsoHandler.authorize(new AuthListener());//WEB/客戶端二選一

mSsoHandler.authorizeClientSso(new AuthListener());

LogUtils.e("進入了微博重新授權");

3、 /**

* 微博認證授權回調類。

* 1. SSO 授權時,需要在 {@link #onActivityResult} 中調用 {@link SsoHandler#authorizeCallBack} 后,

* 該回調才會被執行。

* 2. 非 SSO 授權時,當授權結束后,該回調就會被執行。

* 當授權成功后,請保存該 access_token、expires_in、uid 等信息

*/

class AuthListener implements WeiboAuthListener {

@Override

public void onComplete(Bundle bundle) {

mAccessToken = Oauth2AccessToken.parseAccessToken(bundle);

LogUtils.i(bundle.toString());

AccessTokenKeeper.writeAccessToken(getApplicationContext(),mAccessToken);

LogUtils.i("===phoneNum=="+ mAccessToken.toString());

if (mAccessToken.isSessionValid()) {

thirdPartLogin(mAccessToken.getToken(),mAccessToken.getUid(),3);

//? ? ? ? ? ? ? ? RequestBody body = new FormBody.Builder().add("access_token",mAccessToken.getToken()).build();

/**

* 這個即使幫后臺測試用的現在不用

*/

//? ? ? ? ? ? ? ? OKhttpUtils.post(getActivity(), "https://api.weibo.com/oauth2/get_token_info", body, new OKhttpUtils.DataCallback() {

//? ? ? ? ? ? ? ? ? ? @Override

//? ? ? ? ? ? ? ? ? ? public void onFailure(Call call, IOException e) {

//

//? ? ? ? ? ? ? ? ? ? }

//

//? ? ? ? ? ? ? ? ? ? @Override

//? ? ? ? ? ? ? ? ? ? public void onSuccess(Call call, String json, JSONObject obj) throws JSONException {

//? ? ? ? ? ? ? ? ? ? ? ? ? ? LogUtils.e(json);

//? ? ? ? ? ? ? ? ? ? }

//? ? ? ? ? ? ? ? });

}

}

@Override

public void onWeiboException(WeiboException e) {

AppContext.getApp().showToastCenterShort(e.toString());

}

@Override

public void onCancel() {

AppContext.getApp().showToastCenterShort("請重新登錄");

}

}

三、微信登陸

問題:

微信登錄點擊之后會有一個響應時間 所以你需要在點擊之后將他設置為不可以點擊;

在登陸的onCreate執行 1

1. mIWXAPI = WXAPIFactory.createWXAPI(this, Constant.APP_ID_WX);

mIWXAPI.registerApp(Constant.APP_ID_WX);

2. 點擊微信按鈕登陸

private void goWx() {

type =TYPE_WECHAT;

SendAuth.Req req = new SendAuth.Req();

req.scope = "snsapi_userinfo";

req.state = Constant.APP_WX_STATE;

mIWXAPI.sendReq(req);

finish();

// 這里finish 在wx 的回調activity里面需要判斷

}

// 微信回調

SendAuth.Resp newResp = (SendAuth.Resp) resp;

L.e("resp 111: " + JSON.toJSONString(resp));

//獲取微信傳回的code

String code = newResp.code;

String state = newResp.state;

if (!Constant.APP_WX_STATE.equals(state) && newResp.getType() != 1) { // type 1為登陸 2為分享

return;

}

LogUtils.i(newResp.getType() + "");

String s = String.format(Locale.CANADA, Constant.APP_WX_CALL, Constant.APP_ID_WX

, Constant.APP_WX_APPSECRET, code);

//? ? public static final String APP_WX_CALL ="https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code";

// 該url為請求微信接口獲取openid access_token

//然后請求服務器成功之后可以將 微信的數據保存到本地? SharedPreferences pref

// 如果不需要做自動登陸這些可以不做? 因為微信的accesstoken 有效為7200

// 需要用 refreshtoken 刷新? 其實都是服務器做的 但是沒辦法我們后臺很懶)

//? 將openid 給服務器做用戶唯一標識即可

LogUtils.i(s);

// 組裝s 該url為請求微信接口獲取openid access_token == 數據

拿到之后再傳給服務器就登錄完成了;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,067評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,467評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,184評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,582評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,794評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,343評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,096評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,291評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,513評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,026評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,253評論 2 375

推薦閱讀更多精彩內容