Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android微博QQ登錄授權功能實例

Android微博QQ登錄授權功能實例

編輯:關於Android編程

最近開始做公司的小項目,其中就有微博和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 {
		@Override
		public void onCancel() {
		}

		@Override
		public 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"));
			}
		}

		@Override
		public void onWeiboException(WeiboException arg0) {
		}

	}

	/**
	 * 監聽獲取用戶信息
	 */
	RequestListener requestListener = new RequestListener() {
		@Override
		public void onWeiboException(WeiboException arg0) {
		}

		@Override
		public void onComplete(String arg0) {
			// 得到用戶信息json
			System.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;
		}

		@Override
		public void onCancel() {
		}

		@Override
		public void onError(UiError arg0) {
			System.err.println(arg0.errorCode);
		}

		@Override
		public void onComplete(Object arg0) {
			if (this.scope == "login") {
				//授權登錄成功,獲取到uid,token
				System.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也要重寫一下:

	@Override
	protected 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

歡迎轉載,轉載請注明本文來源。


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved