首先,當然是在騰訊開放平台(http://open.qq.com/)注冊成為開發者,然后獲取APP ID
1.下載SDK
http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD
2.把open-sdk.jar文件和mta_sdk_x.x.x.jar文件拷貝到libs(或lib)目錄下
`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%8B`
3.配置AndroidManifest
<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%83
// Tencent類是SDK的主要實現類,開發者可通過Tencent類訪問騰訊開放的OpenAPI。 // 其中APP_ID是分配給第三方應用的appid,類型為String。 mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());
5.實現回調 IUiListener
6.接收到回調
需要在調用接口的Activity的onActivityResult方法中增加如下代碼:
@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); }
