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() { // @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"); 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() { @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) { if (throwable instanceof HttpException) { HttpException exception = (HttpException) throwable; if (exception.code() == 403) { try { JSONObject errorJson = new JSONObject(exception.response().errorBody().string()); String detail = errorJson.getString("detail"); switch (detail) { case "too frequent": Utils.toast(context, R.string.comment_failed_toofrequent); break; case "user blocked": Utils.toast(context, R.string.comment_failed_userblocked); break; case "user banned": Utils.toast(context, R.string.comment_failed_userbanned); break; case "article blocked": Utils.toast(context, R.string.comment_failed_articleblocked); break; case "illegal": 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 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); } }