package com.tejia.lijin.app.util.user;
|
|
import android.util.Base64;
|
|
import com.google.gson.Gson;
|
import com.google.gson.GsonBuilder;
|
import com.google.gson.reflect.TypeToken;
|
import com.tejia.lijin.app.BasicTextHttpResponseHandler;
|
import com.tejia.lijin.app.ShoppingApi;
|
import com.tejia.lijin.app.ShoppingApplication;
|
import com.tejia.lijin.app.entity.UserInfo;
|
import com.tejia.lijin.app.util.downutil.StringUtils;
|
|
import org.apache.http.Header;
|
import org.json.JSONObject;
|
|
import java.io.UnsupportedEncodingException;
|
|
/**
|
* 登录管理器
|
*/
|
public class LoginManager {
|
|
//需要绑定电话号码
|
public final static int CODE_BIND_PHONE = 101;
|
|
//登录类型
|
public final static int LOGIN_TYPE_PHONE = 1;
|
public final static int LOGIN_TYPE_WX = 2;
|
public final static int LOGIN_TYPE_TAOBAO = 3;
|
public final static int LOGIN_TYPE_QQ = 4;
|
|
private static void login(LoginData loginData, final ILoginAndBindResult loginResultListener) {
|
|
if (loginData.loginKey != null) {
|
if (loginData.loginType == LOGIN_TYPE_PHONE) {
|
//电话号码登录,带有绑定信息
|
ShoppingApi.bindPhoneWithOutLogin(ShoppingApplication.application, loginData.verifyCode, loginData.phone, loginData.accessToken, loginData.loginKey, new BasicTextHttpResponseHandler() {
|
@Override
|
public void onStart() {
|
super.onStart();
|
loginResultListener.onBindStart();
|
}
|
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
super.onSuccessPerfect(statusCode, headers, jsonObject);
|
if (jsonObject.optInt("code") == 0) {
|
Gson gson = new GsonBuilder().serializeNulls().create();
|
JSONObject data = jsonObject.optJSONObject("data");
|
final UserInfo info = gson.fromJson(data.optJSONObject("userInfo").toString(), new TypeToken<UserInfo>() {
|
}.getType());
|
loginResultListener.onBindSuccess(info);
|
} else {
|
loginResultListener.onBindFail(jsonObject.optInt("code"), jsonObject.optString("msg"));
|
}
|
}
|
|
@Override
|
public void onFailure(int statusCode, Header[] headers, String jsonObject, Throwable e) {
|
super.onFailure(statusCode, headers, jsonObject, e);
|
loginResultListener.onBindFail(500, "网络请求出错");
|
}
|
|
@Override
|
public void onFinish() {
|
super.onFinish();
|
loginResultListener.onBindFinish();
|
}
|
});
|
|
|
}
|
} else {
|
|
ShoppingApi.loginNew(ShoppingApplication.application, loginData.verifyCode, loginData.phone, loginData.wxCode, loginData.loginType + "", loginData.accessToken, loginData.qqUser, new BasicTextHttpResponseHandler() {
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
int code = jsonObject.optInt("code");
|
if (code == 0) {
|
Gson gson = new GsonBuilder().serializeNulls().create();
|
JSONObject data = jsonObject.optJSONObject("data");
|
final UserInfo info = gson.fromJson(data.optJSONObject("userInfo").toString(), new TypeToken<UserInfo>() {
|
}.getType());
|
loginResultListener.onLoginSuccess(info);
|
} else if (code == CODE_BIND_PHONE) {
|
JSONObject data = jsonObject.optJSONObject("data");
|
String key = data.optString("key");
|
loginResultListener.bindPhone(key);
|
} else {
|
loginResultListener.onLoginFail(code, jsonObject.optString("msg"));
|
}
|
}
|
|
@Override
|
public void onFailure(int statusCode, Header[] headers, String jsonObject, Throwable e) {
|
super.onFailure(statusCode, headers, jsonObject, e);
|
loginResultListener.onLoginFail(500, "网络请求出错");
|
}
|
|
@Override
|
public void onStart() {
|
super.onStart();
|
loginResultListener.onLoginStart();
|
}
|
|
@Override
|
public void onFinish() {
|
super.onFinish();
|
loginResultListener.onLoginFinish();
|
}
|
});
|
}
|
|
}
|
|
/**
|
* 电话号码登录
|
*
|
* @param phone
|
* @param vcode
|
* @param accessToken
|
* @param loginResultListener
|
*/
|
public static void loginByPhone(String phone, String vcode, String accessToken, ILoginAndBindResult loginResultListener) {
|
LoginData loginData = new LoginData();
|
loginData.loginType = LOGIN_TYPE_PHONE;
|
loginData.phone = phone;
|
loginData.verifyCode = vcode;
|
loginData.accessToken = accessToken;
|
login(loginData, loginResultListener);
|
}
|
|
/**
|
* 绑定电话号码登录(loginKey中带有上次登录信息)
|
*
|
* @param phone
|
* @param vcode
|
* @param accessToken
|
* @param loginKey
|
* @param loginResultListener
|
*/
|
public static void loginWithPhone(String phone, String vcode, String accessToken, String loginKey, ILoginAndBindResult loginResultListener) {
|
LoginData loginData = new LoginData();
|
loginData.phone = phone;
|
loginData.verifyCode = vcode;
|
loginData.accessToken = accessToken;
|
loginData.loginKey = loginKey;
|
loginData.loginType=LOGIN_TYPE_PHONE;
|
login(loginData, loginResultListener);
|
}
|
|
|
/**
|
* 微信登录
|
*
|
* @param code
|
* @param loginResultListener
|
*/
|
public static void loginByWX(String code, ILoginAndBindResult loginResultListener) {
|
LoginData loginData = new LoginData();
|
loginData.loginType = LOGIN_TYPE_WX;
|
loginData.wxCode = code;
|
login(loginData, loginResultListener);
|
}
|
|
/**
|
* QQ登录
|
*/
|
public static void loginByQQ(QQLoginManager.QQUserInfo user, ILoginAndBindResult loginResultListener) {
|
LoginData loginData = new LoginData();
|
loginData.loginType = LOGIN_TYPE_QQ;
|
try {
|
loginData.qqUser = Base64.encodeToString(new Gson().toJson(user).getBytes("UTF-8"), Base64.NO_WRAP);
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
login(loginData, loginResultListener);
|
}
|
|
static class LoginData {
|
public String verifyCode;
|
private String wxCode;
|
private String phone;
|
private String accessToken;
|
public int loginType;
|
public String loginKey;
|
public String qqUser;
|
}
|
|
public static interface ILoginAndBindResult {
|
public void onLoginStart();
|
|
public void onLoginFinish();
|
|
public void onLoginSuccess(UserInfo user);
|
|
public void onLoginFail(int code, String msg);
|
|
public void bindPhone(String key);
|
|
public void onBindStart();
|
|
public void onBindFinish();
|
|
public void onBindSuccess(UserInfo user);
|
|
public void onBindFail(int code, String msg);
|
}
|
|
public static abstract class LoginAndBindListener implements ILoginAndBindResult {
|
public void onLoginStart() {
|
}
|
|
public void onLoginFinish() {
|
|
}
|
|
public void onLoginSuccess(UserInfo user) {
|
|
}
|
|
public void onLoginFail(int code, String msg) {
|
|
}
|
|
public void bindPhone(String key) {
|
|
}
|
|
public void onBindStart() {
|
|
}
|
|
public void onBindFinish() {
|
|
}
|
|
public void onBindSuccess(UserInfo user) {
|
|
}
|
|
public void onBindFail(int code, String msg) {
|
|
}
|
}
|
|
|
}
|