今天试试第三方登入,一般的第三方登入都使用友盟,今天试了试QQ自己的
1.在qq互联上申请api
2.准备工作好了,就开始敲代码了,将包导入自己项目
3.在AndroidMainifest上,加入qq所需要的权限,和activity
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" />
<activity android:name="com.tencent.tauth.AuthActivity" android:noHistory="true" android:launchMode="singleTask" > <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="自己appkey" /> </intent-filter> </activity> <activity android:name="com.tencent.connect.common.AssistActivity" android:configChanges="orientation|keyboardHidden" android:screenOrientation="behind" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
4.开始写代码了,初始化对象
public void login() { mTencent = Tencent.createInstance("appkey", LoginActivity.this); if (!mTencent.isSessionValid()) { mTencent.login(this, "all", loginListener,true); } }
qq的回调
IUiListener loginListener = new BaseUiListener() { @Override protected void doComplete(JSONObject values) { Log.d("SDKQQAgentPref", "AuthorSwitch_SDK:" + SystemClock.elapsedRealtime()); initOpenidAndToken(values); updateUserInfo(); } };
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) { } }
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) { } @Override public void onCancel() { } }
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) { } }
Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 0) { JSONObject response = (JSONObject) msg.obj; if (response.has("nickname")) { try { showToast(response.getString("nickname")); } catch (JSONException e) { e.printStackTrace(); } } }else if(msg.what == 1){ Bitmap bitmap = (Bitmap)msg.obj; } } };
private void updateUserInfo() { if (mTencent != null && mTencent.isSessionValid()) { IUiListener listener = new IUiListener() { @Override public void onError(UiError e) { } @Override public void onComplete(final Object response) { Message msg = new Message(); msg.obj = response; msg.what = 0; mHandler.sendMessage(msg); new Thread(){ @Override public void run() { JSONObject json = (JSONObject)response; if(json.has("figureurl")){ Bitmap bitmap = null; try { bitmap = Util.getbitmap(json.getString("figureurl_qq_2")); } catch (JSONException e) { } Message msg = new Message(); msg.obj = bitmap; msg.what = 1; mHandler.sendMessage(msg); } } }.start(); } @Override public void onCancel() { } }; mInfo = new UserInfo(this, mTencent.getQQToken()); mInfo.getUserInfo(listener); } else { } } 重要的是
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Tencent.onActivityResultData(requestCode,resultCode,data,loginListener); }