標籤:android style blog http io ar color os sp
最近開始做公司的小項目,其中就有微博和QQ的使用者登入,在這裡記錄一下,另外QQ的文檔非常噁心,鄙視一個!
微博授權登入:
先去微博開放平台申請應用,Android應用的包名和簽名填好,然後下載匯入SDK。
(很多傻瓜教程上都有這些東西的註冊流程,不過要是這些你都弄不好就別做開發了,微博的基本上看SDK裡的文檔和樣本基本就沒問題了)
直接上代碼,其實很簡單:
// ///////////////////////////////////////////////////////////// 微博登入相關操作 zhangyue 20141201//// /////////////////////////////////////////////////////////private WeiboAuth weiboAuth;private Oauth2AccessToken weiboAccessToken;private SsoHandler ssoHandler;private UsersAPI usersAPI;/** * 登入按鈕事件,進入授權登入流程 * * @param view */public void onWeiboLogin(View view) {weiboAuth = new WeiboAuth(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE);// sso安全登入ssoHandler = new SsoHandler(this, weiboAuth);ssoHandler.authorize(new AuthListener());}/** * 授權登入監聽 * * @author zhang.yue * @date 2014年12月1日 */class AuthListener implements WeiboAuthListener {@Overridepublic void onCancel() {}@Overridepublic void onComplete(Bundle arg0) {// 擷取到uid,token等資訊weiboAccessToken = Oauth2AccessToken.parseAccessToken(arg0);if (weiboAccessToken.isSessionValid()) {// 登入成功,擷取使用者資訊usersAPI = new UsersAPI(weiboAccessToken);long uid = Long.parseLong(weiboAccessToken.getUid());usersAPI.show(uid, requestListener);} else {// 登入失敗System.out.println(arg0.get("code"));}}@Overridepublic void onWeiboException(WeiboException arg0) {}}/** * 監聽擷取使用者資訊 */RequestListener requestListener = new RequestListener() {@Overridepublic void onWeiboException(WeiboException arg0) {}@Overridepublic void onComplete(String arg0) {// 得到使用者資訊jsonSystem.out.println(arg0);}};
QQ授權登入:
同樣的去QQ互聯平台申請應用填資料,不過QQ的文檔很噁心,先看代碼,一會再說:
// ///////////////////////////////////////////////////////////// QQ登入相關操作 zhangyue 20141201//// /////////////////////////////////////////////////////////private Tencent tencent;/** * 登入按鈕事件,進入授權登入流程 * * @param view */public void onQQLogin(View view) {tencent = Tencent.createInstance(Constants.QQ_APP_KEY, getApplicationContext());tencent.login(this, Constants.QQ_SCOPE, new BaseUiListener("login"));}/** * Ui類封裝介面監聽 * @author zhang.yue * @date 2014年12月1日 */class BaseUiListener implements IUiListener {private String scope;public BaseUiListener(String scope) {this.scope = scope;}@Overridepublic void onCancel() {}@Overridepublic void onError(UiError arg0) {System.err.println(arg0.errorCode);}@Overridepublic void onComplete(Object arg0) {if (this.scope == "login") {//授權登入成功,擷取到uid,tokenSystem.out.println(arg0);//擷取使用者資訊UserInfo userinfo = new UserInfo(LoginMainActivity.this, tencent.getQQToken());userinfo.getUserInfo(new BaseUiListener("get_user_info"));} else if (this.scope.equals("get_user_info")) {//獲得使用者資訊json格式System.out.println(arg0);}}}/** * 非封裝類介面監聽 tencent.request(同步) tencent.requestAsync(非同步) * @author zhang.yue * @date 2014年12月1日 *///class BaseApiListener implements IRequestListener {////@Override//public void onComplete(JSONObject arg0) {//System.out.println(arg0);//}////@Override//public void onConnectTimeoutException(ConnectTimeoutException arg0) {//}////@Override//public void onHttpStatusException(HttpStatusException arg0) {//}////@Override//public void onIOException(IOException arg0) {//}////@Override//public void onJSONException(JSONException arg0) {//}////@Override//public void onMalformedURLException(MalformedURLException arg0) {//}////@Override//public void onNetworkUnavailableException(NetworkUnavailableException arg0) {//}////@Override//public void onSocketTimeoutException(SocketTimeoutException arg0) {//}////@Override//public void onUnknowException(Exception arg0) {//}////}在QQ的文檔中,擷取使用者資訊是這樣寫的:
/** * 擷取使用者資訊 */private void onClickUserInfo() { mTencent.requestAsync(Constants.GRAPH_USER_INFO, null, Constants.HTTP_GET, new BaseApiListener("get_user_info", false), null);}
結果Constants.GRAPH_USER_INFO這個根本沒有,其實新的已經換成UserInfo類那種方式擷取了。還是得把樣本匯入進來看看才知道。
另外,ActivityResult也要重寫一下:
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (ssoHandler != null) {ssoHandler.authorizeCallBack(requestCode, resultCode, data);}if (tencent != null) {tencent.onActivityResult(requestCode, resultCode, data);}}這樣授權和使用者資訊就都拿到了,SDK版本微博是2.5,QQ是2.2。
------------------------------------------------
我的獨立部落格:壊小子 - http://www.zyblog.net/
本文連結:http://www.zyblog.net/post-177.html
健身潮-IT人健身指南:http://www.jianshenchao.com
歡迎轉載,轉載請註明本文來源。
Android微博QQ登入授權功能執行個體