今天用到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 ..... 可能有些没说清楚,代码有点乱...如果有问题,麻烦提出了 谢谢