首先,固然是在騰訊開放平臺(http://open.qq.com/)註冊成爲開發者,而後獲取APP IDandroid
1.下載SDKjson
http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BDapp
2.把open-sdk.jar文件和mta_sdk_x.x.x.jar文件拷貝到libs(或lib)目錄下ide
http://wiki.open.qq.com/wiki/%E5%88%9B%E5%BB%BA%E5%B9%B6%E9%85%8D%E7%BD%AE%E5%B7%A5%E7%A8%8Bthis
3.配置AndroidManifestspa
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 從QQ登陸中copy的代碼--> <activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="tencent1105546048" /> </intent-filter> </activity> <activity android:name="com.tencent.connect.common.AssistActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
4.建立實例 http://wiki.open.qq.com/wiki/%E5%88%9B%E5%BB%BA%E5%AE%9E%E4%BE%8B%E5%B9%B6%E5%AE%9E%E7%8E%B0%E5%9B%9E%E8%B0%83code
// Tencent類是SDK的主要實現類,開發者可經過Tencent類訪問騰訊開放的OpenAPI。 // 其中APP_ID是分配給第三方應用的appid,類型爲String。 mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());
5.實現回調 IUiListenerblog
6.接收到回調
須要在調用接口的Activity的onActivityResult方法中增長以下代碼:token
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Tencent.onActivityResultData(requestCode,resultCode,data,listener); }
具體源碼:接口
//變量 boolean isServerSideLogin = false; public static Tencent mTencent; //點擊按鈕以後QQ登陸 public void loginQQ(View view){ //初始化,獲得APPID mTencent = Tencent.createInstance(ConstantsData.QQ_APP_ID, this); if (!mTencent.isSessionValid()) { mTencent.login(this, "all", loginListener); isServerSideLogin = false; Log.d("SDKQQAgentPref", "FirstLaunch_SDK:" + SystemClock.elapsedRealtime()); } else { if (isServerSideLogin) { // Server-Side 模式的登錄, 先退出,再進行SSO登錄 mTencent.logout(this); mTencent.login(this, "all", loginListener); isServerSideLogin = false; Log.d("SDKQQAgentPref", "FirstLaunch_SDK:" + SystemClock.elapsedRealtime()); return; } mTencent.logout(this); } } //初始化OPENID和TOKEN值(爲了得了用戶信息) public static void initOpenidAndToken(JSONObject jsonObject) { try { String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN); String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN); String openId = jsonObject.getString(Constants.PARAM_OPEN_ID); if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires) && !TextUtils.isEmpty(openId)) { mTencent.setAccessToken(token, expires); mTencent.setOpenId(openId); } } catch(Exception e) { } } IUiListener loginListener = new BaseUiListener() { @Override protected void doComplete(JSONObject values) { Log.d("SDKQQAgentPref", "AuthorSwitch_SDK:" + SystemClock.elapsedRealtime()); initOpenidAndToken(values); } }; //實現回調 private class BaseUiListener implements IUiListener { @Override public void onComplete(Object response) { if (null == response) { Util.showResultDialog(LoginActivity.this, "返回爲空", "登陸失敗"); return; } JSONObject jsonResponse = (JSONObject) response; if (null != jsonResponse && jsonResponse.length() == 0) { Util.showResultDialog(LoginActivity.this, "返回爲空", "登陸失敗"); return; } Util.showResultDialog(LoginActivity.this, response.toString(), "登陸成功"); // 有獎分享處理 // handlePrizeShare(); doComplete((JSONObject)response); } protected void doComplete(JSONObject values) { } @Override public void onError(UiError e) { Util.toastMessage(LoginActivity.this, "onError: " + e.errorDetail); Util.dismissDialog(); } @Override public void onCancel() { Util.toastMessage(LoginActivity.this, "onCancel: "); Util.dismissDialog(); if (isServerSideLogin) { isServerSideLogin = false; } } } //QQ登陸後的回調 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d("TAG", "-->onActivityResult " + requestCode + " resultCode=" + resultCode); if (requestCode == Constants.REQUEST_LOGIN || requestCode == Constants.REQUEST_APPBAR) { Tencent.onActivityResultData(requestCode,resultCode,data,loginListener); } super.onActivityResult(requestCode, resultCode, data); }