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

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

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

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

第三方登錄注意問題

一解虱、QQ

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

2、修改MD5 簽名

原因:簽名問題導致墨坚。

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

簽名修改操作步驟:對應移動應用的開發(fā)者可以進入QQ互聯(lián)官網(wǎng)https://connect.qq.com/index.html? ? =》應用管理=》移動應用=》關聯(lián)騰訊開放平臺,根據(jù)提示關聯(lián)創(chuàng)建出現(xiàn)問題的移動應用帽撑,修改/添加相應的簽名或者包名泼各。

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

2扣蜻、若QQ互聯(lián)里已有對應的移動應用,可直接改簽名及塘;若無對應移動應用莽使,要先關聯(lián)開放平臺創(chuàng)建一個同APP ID的應用進行包名/簽名修改或者添加

3、包名笙僚、簽名需小寫芳肌,去掉冒號

APP 使用步驟:

在登陸的onCreate執(zhí)行 1

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

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

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

/**

* QQ回調(diào)的Listener

*/

private BaseUiListener mBaseUiListener = new BaseUiListener();

private class BaseUiListener implements IUiListener {

@Override

public void onComplete(Object o) {

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

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); // 這里是將數(shù)據(jù)傳給服務器生成APP對應的賬號

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

mTencent.setAccessToken(access_token, expires_in);

mTencent.setOpenId(openid);

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

LogUtils.i(o.toString());

}

@Override

public void onError(UiError uiError) {

LogUtils.i(uiError.toString());

}

@Override

public void onCancel() {

LogUtils.i("取消了");

}

}

3责嚷、授權登陸之后的接受回調(diào)

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) 并調(diào)用 微博也要執(zhí)行這個掂铐;

setResult(RESULT_OK);

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

二罕拂、微博登陸

在登陸的onCreate執(zhí)行 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爆班、 /**

* 微博認證授權回調(diào)類。

* 1. SSO 授權時辱姨,需要在 {@link #onActivityResult} 中調(diào)用 {@link SsoHandler#authorizeCallBack} 后柿菩,

* 該回調(diào)才會被執(zhí)行。

* 2. 非 SSO 授權時雨涛,當授權結束后枢舶,該回調(diào)就會被執(zhí)行。

* 當授權成功后替久,請保存該 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();

/**

* 這個即使幫后臺測試用的現(xiàn)在不用

*/

//? ? ? ? ? ? ? ? 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執(zhí)行 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 的回調(diào)activity里面需要判斷

}

// 微信回調(diào)

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

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

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

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

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

LogUtils.i(s);

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

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

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蒂誉,隨后出現(xiàn)的幾起案子教藻,更是在濱河造成了極大的恐慌,老刑警劉巖右锨,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件括堤,死亡現(xiàn)場離奇詭異,居然都是意外死亡绍移,警方通過查閱死者的電腦和手機痊臭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來登夫,“玉大人广匙,你說我怎么就攤上這事∧詹撸” “怎么了鸦致?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長涣楷。 經(jīng)常有香客問我分唾,道長,這世上最難降的妖魔是什么狮斗? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任绽乔,我火速辦了婚禮,結果婚禮上碳褒,老公的妹妹穿的比我還像新娘景殷。我一直安慰自己攀芯,他們只是感情好,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伊约,像睡著了一般骇笔。 火紅的嫁衣襯著肌膚如雪闲询。 梳的紋絲不亂的頭發(fā)上竭望,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機與錄音是复,去河邊找鬼删顶。 笑死,一個胖子當著我的面吹牛淑廊,可吹牛的內(nèi)容都是我干的逗余。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蒋纬,長吁一口氣:“原來是場噩夢啊……” “哼猎荠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蜀备,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤关摇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后碾阁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體输虱,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年脂凶,在試婚紗的時候發(fā)現(xiàn)自己被綠了宪睹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡蚕钦,死狀恐怖亭病,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嘶居,我是刑警寧澤罪帖,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站邮屁,受9級特大地震影響整袁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜佑吝,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一坐昙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芋忿,春花似錦炸客、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至逆趣,卻和暖如春蝶溶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宣渗。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工抖所, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痕囱。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓田轧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鞍恢。 傳聞我的和親對象是個殘疾皇子傻粘,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容