Files
assistant-android/app/src/main/java/com/gh/common/util/LoginUtils.java

357 lines
14 KiB
Java

package com.gh.common.util;
import android.content.Context;
import com.gh.gamecenter.R;
import com.gh.gamecenter.retrofit.JSONObjectResponse;
import com.gh.gamecenter.retrofit.Response;
import com.gh.gamecenter.retrofit.RetrofitManager;
import com.lightgame.utils.Utils;
import org.json.JSONException;
import org.json.JSONObject;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.HttpException;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/**
* Created by khy on 7/07/17.
*/
// TODO: 1/12/17 逐步整理 删除
public class LoginUtils {
// public static void checkPhoneNum(final Context context, final String phoneName, final onCaptchaCallBackListener listener) { // 老用户登录检查手机是否登录过
// RetrofitManager.getInstance(context).getApi()
// .checkPhoneNum(phoneName)
// .subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
// .subscribe(new Response<ResponseBody>() {
// @Override
// public void onResponse(ResponseBody response) {
// super.onResponse(response);
// try {
// JSONObject content = new JSONObject(response.string());
// String status = content.getString("status");
// if ("ok".equals(status)) {
// getPhoneCaptcha(context, phoneName, listener);
// } else {
// DialogUtils.showWarningDialog(context, null, "手机号已存在,请使用未登录过的手机号,以保证数据正常同步到新账号上"
// , null, "我知道了", null, null);
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
//
// @Override
// public void onFailure(HttpException e) {
// super.onFailure(e);
// if (e == null) {
// Utils.toast(context, "请检查网络是否可用");
// return;
// }
// try {
// ResponseBody responseBody = e.response().errorBody();
// String string = responseBody.string();
// JSONObject content = new JSONObject(string);
// int code = content.getInt("code");
// outputErrorHint(context, code);
// } catch (Exception e1) {
// e1.printStackTrace();
// }
// }
// });
//
// }
// 获取验证码
public static void getPhoneCaptcha(final Context context, String phoneNum, final onCaptchaCallBackListener listener) {
JSONObject content = new JSONObject();
try {
content.put("mobile", phoneNum);
content.put("device", DeviceUtils.getLoginDevice(context.getApplicationContext()));
} catch (JSONException e) {
e.printStackTrace();
}
RequestBody body = RequestBody.create(MediaType.parse("application/json"), content.toString());
RetrofitManager.getInstance(context)
.getUsersea()
.loginByCaptcha(body)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new JSONObjectResponse() {
@Override
public void onResponse(JSONObject response) {
super.onResponse(response);
try {
listener.onCaptcha(response.getString("service_id"));
Utils.toast(context, "验证码短信已发送,请注意查收");
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(HttpException e) {
super.onFailure(e);
if (e == null) {
Utils.toast(context, "无法获取验证码,请检查你的网络状态");
return;
}
try {
ResponseBody responseBody = e.response().errorBody();
String string = responseBody.string();
JSONObject content = new JSONObject(string);
int code = content.getInt("code");
if (code == 403202) {
captchaErrorHint(context, content);
} else {
outputErrorHint(context, code);
}
} catch (Exception e1) {
e1.printStackTrace();
Utils.toast(context, "无法获取验证码,请检查你的网络状态");
}
}
});
}
// 注销登录
public static void logout(final Context context, final OnLogoutListener listener) {
RetrofitManager.getInstance(context)
.getUsersea()
.logout()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Response<ResponseBody>() {
@Override
public void onResponse(ResponseBody response) {
super.onResponse(response);
listener.onCompleted();
}
@Override
public void onFailure(HttpException e) {
super.onFailure(e);
listener.onCompleted();
}
});
}
public static boolean userPostErrorToast(Throwable throwable, Context context, boolean isComment) {
if (throwable instanceof HttpException) {
HttpException exception = (HttpException) throwable;
if (exception.code() == 403) {
try {
JSONObject errorJson = new JSONObject(exception.response().errorBody().string());
int errorCode = errorJson.getInt("code");
switch (errorCode) {
case 403019:
if (isComment) {
Utils.toast(context, R.string.comment_failed_userblocked);
} else {
Utils.toast(context, R.string.comment_failed_userbanned);
}
break;
case 403020:
Utils.toast(context, R.string.comment_failed_toofrequent);
break;
case 403021:
Utils.toast(context, R.string.comment_failed_illegal);
break;
default:
Utils.toast(context, R.string.comment_failed_unknown);
break;
}
} catch (Exception ex) {
ex.printStackTrace();
Utils.toast(context, "无法识别错误类型");
}
return true;
}
}
return false;
}
public static void captchaErrorHint(Context context, JSONObject content) {
try {
JSONObject detail = content.getJSONObject("detail");
if ("isv.BUSINESS_LIMIT_CONTROL".equals(detail.getString("sub_code"))) {
Utils.toast(context, "获取验证码太频繁,请稍后再试");
} else {
Utils.toast(context, detail.getString("sub_msg"));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
public static void outputErrorHint(Context context, int code) {
switch (code) {
case 40000:
Utils.toast(context, "参数不全");
break;
case 400001:
Utils.toast(context, "验证码获取过快,请稍后重试");// 已经发送过短信
break;
case 400002:
Utils.toast(context, "请求第三方开放平台时发生错误");
break;
case 400003:
Utils.toast(context, "上传用户头像时发生错误");
break;
case 400101:
Utils.toast(context, "缺少参数 app_id");
break;
case 400102:
Utils.toast(context, "缺少签名验证的头信息");
break;
case 400104:
Utils.toast(context, "缺少token");
break;
case 400105:
Utils.toast(context, "缺少手机号码");
break;
case 400106:
Utils.toast(context, "缺少用户名");
break;
case 400107:
Utils.toast(context, "缺少密码参数");
break;
case 400202:
Utils.toast(context, "无效的手机号码");
break;
case 400203:
Utils.toast(context, "无效的用户名");
break;
case 400204:
Utils.toast(context, "无效的头像地址");
break;
case 400205:
Utils.toast(context, "无效的性别参数");
break;
case 400206:
Utils.toast(context, "无效的地区参数");
break;
case 400208:
Utils.toast(context, "无效的密码");
break;
case 400209:
Utils.toast(context, "无效的URL 地址");
break;
case 42000:
Utils.toast(context, "无效的app_id");
break;
case 42001:
Utils.toast(context, "无效的app_secret");
break;
case 42002:
Utils.toast(context, "无效的Union_id");
break;
case 42003:
Utils.toast(context, "无效的设备信息");
break;
case 42004:
Utils.toast(context, "无效的请求");
break;
case 400301:
Utils.toast(context, "签名验证失败");
break;
case 400302:
Utils.toast(context, "验证码错误");
break;
case 400303:
Utils.toast(context, "密码错误");
break;
case 400304:
Utils.toast(context, "不支持该种方式登录");
break;
case 400305:
Utils.toast(context, "错误的状态值(应用只有两种状态: working / stop)");
break;
case 400306:
Utils.toast(context, "传递了无法识别的参数");
break;
case 400401:
Utils.toast(context, "token过期");
break;
case 400402:
Utils.toast(context, "Service_id过期,主要原因是:收到手机短信验证码后长时间没有进行登录操作");
break;
case 400403:
Utils.toast(context, "验证码已过期");
break;
case 400501:
Utils.toast(context, "同名应用已经存在");
break;
case 400502:
Utils.toast(context, "昵称已存在");
break;
case 400503:
Utils.toast(context, "名称已经存在");
break;
case 400601:
Utils.toast(context, "应用不存在");
break;
case 400602:
Utils.toast(context, "用户不存在");
break;
case 400603:
Utils.toast(context, "用户系统不存在");
break;
case 400604:
Utils.toast(context, "用户已被冻结");
break;
case 400605:
Utils.toast(context, "用户没有冻结");
break;
case 400606:
Utils.toast(context, "该应用被停止运行了");
break;
case 400801:
Utils.toast(context, "访问过于频繁");
break;
case 403001:
Utils.toast(context, "设备异常,获取验证码失败,请更换登陆方式或明天再试");
break;
case 403202:
Utils.toast(context, "403202");
break;
case 400213:
Utils.toast(context, "昵称违规");
break;
case 403801:
Utils.toast(context, "获取验证码太频繁,请稍后再试");
break;
case 403204:
Utils.toast(context, "获取验证码太频繁,请稍后再试");
break;
default:
Utils.toast(context, code + "");
break;
}
}
// 更改用户信息回调
public interface OnLogoutListener {
void onCompleted();
}
// 获取验证码回调
public interface onCaptchaCallBackListener {
void onCaptcha(String serviceId);
}
}