package ezy.sdk3rd.social.platforms.qq;
import android.app.Activity;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.util.Log;
import com.tencent.connect.common.Constants;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;
import org.json.JSONObject;
import ezy.sdk3rd.social.authorize.IAuthorize;
import ezy.sdk3rd.social.sdk.OnCallback;
import ezy.sdk3rd.social.sdk.Platform;
import ezy.sdk3rd.social.sdk.ResultCode;
/**
* Created by ezy on 17/3/18.
*/
public class QQAuth implements IAuthorize {
public static final String TAG = "ezy.sdk3rd.qq.auth";
Activity mActivity;
Platform mPlatform;
Tencent mApi;
IUiListener mListener;
QQAuth(Activity activity, Platform platform) {
mActivity = activity;
mPlatform = platform;
mApi = Tencent.createInstance(platform.getAppId(), mActivity);
}
String toMessage(UiError error) {
return "[" + error.errorCode + "]" + error.errorMessage;
}
@Override
public void authorize(@NonNull final OnCallback<String> callback) {
mListener = new IUiListener() {
@Override
public void onComplete(Object response) {
Log.e(TAG, "complete ==> " + response);
if (response instanceof JSONObject && ((JSONObject) response).length() > 0) {
JSONObject jo = (JSONObject) response;
String token = jo.optString(Constants.PARAM_ACCESS_TOKEN);
String expires = jo.optString(Constants.PARAM_EXPIRES_IN);
String openId = jo.optString(Constants.PARAM_OPEN_ID);
if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires) && !TextUtils.isEmpty(openId)) {
mApi.setAccessToken(token, expires);
mApi.setOpenId(openId);
}
callback.onSucceed(mActivity, "token|" + mApi.getOpenId() + "|" + mApi.getAccessToken());
} else {
callback.onFailed(mActivity, ResultCode.RESULT_FAILED, "登录失败: 返回为空");
}
callback.onCompleted(mActivity);
}
@Override
public void onError(UiError e) {
Log.e(TAG, "error ==> " + e.errorDetail);
callback.onFailed(mActivity, ResultCode.RESULT_FAILED, toMessage(e));
}
@Override
public void onCancel() {
callback.onFailed(mActivity, ResultCode.RESULT_CANCELLED, "用户取消了登录");
}
};
callback.onStarted(mActivity);
mApi.login(mActivity, "get_simple_userinfo", mListener);
}
@Override
public void onResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Constants.REQUEST_LOGIN) {
Tencent.onActivityResultData(requestCode, resultCode, data, mListener);
}
}
}