今天用到qq第三方登录 , 遇到一些问题
记录下来,防止忘记
然后导入到自己的项目
只记录一些关键代码:
qqLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mTencent.logout(context);
if (!mTencent.isSessionValid()) {
mTencent.login(LoginActivity.this, "all", loginListener);
}
}
});
/** * qq Login */ IUiListener loginListener = new IUiListener() { @Override public void onComplete(Object o) { Log.i(TAG, "iUiListener:" + o.toString()); String json = o.toString(); try { JSONObject rst = new JSONObject(json); String token = rst.getString(Constants.PARAM_ACCESS_TOKEN); String expires = rst.getString(Constants.PARAM_EXPIRES_IN); IMservice.openId = rst.getString(Constants.PARAM_OPEN_ID); //**下面这两步设置很重要,如果没有设置,返回为空** mTencent.setOpenId(IMservice.openId); mTencent.setAccessToken(token, expires); getuserInfo(); } catch (JSONException e) { e.printStackTrace(); } } @Override public void onError(UiError uiError) { Log.i(TAG, "iUiListener:" + uiError.toString());
//这里就只是个Toast,我整合了 ToastUtils.ToastShow(context, "登录失败,请稍后再试"); } @Override public void onCancel() { Log.i(TAG, "取消登录"); mTencent.logout(context); ToastUtils.ToastShow(context, "登录取消"); } }; private void getuserInfo() { ThreadUtils.runInThread(new Runnable() { @Override public void run() { qqInfo = new UserInfo(LoginActivity.this, mTencent.getQQToken()); qqInfo.getUserInfo(getQQinfoListener); } }); } IUiListener getQQinfoListener = new IUiListener() { @Override public void onComplete(Object o) { ToastUtils.ToastShow(context,"getQQinfoListener:"+ o.toString()); Log.i(TAG, "getQQinfoListener:" + o.toString()); } @Override public void onError(UiError uiError) { ToastUtils.ToastShow(context, "登录失败,请稍后再试"); } @Override public void onCancel() { mTencent.logout(context); ToastUtils.ToastShow(context, "登录取消"); } }; /** * qq Login End */
配置文件记得加上:
<!-- qq --> <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="tencent000000" />
添加权限<!--000000改成你的APPID--> </intent-filter> </activity> <activity android:name="com.tencent.connect.common.AssistActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <!-- qq -->
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
到这里,我运行一直得不到qq信息....找了好久,才知道 ..
//应用调用Andriod_SDK接口时,如果要成功接收到回调,需要在调用接口的Activity的onActivityResult方法中增加如下代码: //其中onActivityResultData接口中的listener为当前调用的Activity所实现的相应回调UIListener。 Tencent.onActivityResultData(requestCode, resultCode, data, loginListener);
END ..... 可能有些没说清楚,代码有点乱...如果有问题,麻烦提出了 谢谢