diff --git a/app/src/main/java/com/shunzhi/parent/AppContext.java b/app/src/main/java/com/shunzhi/parent/AppContext.java index 54e88a2..295a4e8 100644 --- a/app/src/main/java/com/shunzhi/parent/AppContext.java +++ b/app/src/main/java/com/shunzhi/parent/AppContext.java @@ -1,12 +1,18 @@ package com.shunzhi.parent; +import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.util.Log; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.SDKOptions; +import com.netease.nimlib.sdk.StatusBarNotificationConfig; +import com.netease.nimlib.sdk.auth.LoginInfo; import com.share.mvpsdk.global.GlobalApplication; import com.amap.api.location.AMapLocationClientOption.AMapLocationMode; @@ -17,9 +23,9 @@ import com.amap.api.location.AMapLocationClientOption.AMapLocationMode; public class AppContext extends GlobalApplication { private static AppContext appContext; - public final static int LOCATION_CITYNAME=0x00; + public final static int LOCATION_CITYNAME = 0x00; - public String cityName="",district=""; + public String cityName = "", district = ""; public static AppContext getInstance() { return appContext; @@ -29,14 +35,39 @@ public class AppContext extends GlobalApplication { public AMapLocationClient mLocationClient = null; //声明AMapLocationClientOption对象 - public AMapLocationClientOption mLocationOption=null; + public AMapLocationClientOption mLocationOption = null; @Override public void onCreate() { - appContext=this; + appContext = this; super.onCreate(); //开启地图地位 initMapLocal(); + NIMClient.init(this, loginInfo(), options()); + } + + private SDKOptions options() { + SDKOptions options = new SDKOptions(); + + // 如果将新消息通知提醒托管给 SDK 完成,需要添加以下配置。否则无需设置。 + StatusBarNotificationConfig config = new StatusBarNotificationConfig(); + //config.notificationEntrance = MainActivity.class; // 点击通知栏跳转到该Activity + config.notificationSmallIconId = R.mipmap.ic_launcher; + options.sdkStorageRootPath = getExternalFilesDir(null).getPath() + "/nim"; + options.statusBarNotificationConfig = config; + //options.preloadAttach=false; + return options; + } + + + private LoginInfo loginInfo() { + SharedPreferences sp = getSharedPreferences("info", Context.MODE_PRIVATE); + String account = sp.getString("account", ""); + String token = sp.getString("token", ""); + if (account.length() > 0 && token.length() > 0) { + return new LoginInfo(account, token); + } + return null; } private void initMapLocal() { @@ -66,47 +97,47 @@ public class AppContext extends GlobalApplication { mLocationOption.setHttpTimeOut(20000); //关闭缓存机制 mLocationOption.setLocationCacheEnable(false); - if (null!=mLocationClient) + if (null != mLocationClient) mLocationClient.setLocationOption(mLocationOption); //启动定位 startLocation(); } - public void startLocation(){ + public void startLocation() { //启动定位 - if (null!=mLocationClient){ + if (null != mLocationClient) { // mLocationClient.setLocationOption(mLocationOption); //设置场景模式后最好调用一次stop,再调用start以保证场景模式生效 stopLocation(); mLocationClient.startLocation(); - }else initMapLocal(); + } else initMapLocal(); } - public void stopLocation(){ - if (null!=mLocationClient)mLocationClient.stopLocation(); + public void stopLocation() { + if (null != mLocationClient) mLocationClient.stopLocation(); } - public void destoryLocation(){ - if (null!=mLocationClient)mLocationClient.onDestroy(); + public void destoryLocation() { + if (null != mLocationClient) mLocationClient.onDestroy(); } //声明定位回调监听器 public AMapLocationListener mLocationListener = new AMapLocationListener() { @Override public void onLocationChanged(AMapLocation aMapLocation) { - if(null!=aMapLocation){ + if (null != aMapLocation) { - if (aMapLocation.getErrorCode()==0){ - cityName=aMapLocation.getCity(); - district=aMapLocation.getDistrict(); + if (aMapLocation.getErrorCode() == 0) { + cityName = aMapLocation.getCity(); + district = aMapLocation.getDistrict(); aMapLocation.getCityCode(); - Intent intent=new Intent(); - intent.setAction(LOCATION_CITYNAME+""); + Intent intent = new Intent(); + intent.setAction(LOCATION_CITYNAME + ""); sendBroadcast(intent); stopLocation(); - }else { - cityName="定位失败"; + } else { + cityName = "定位失败"; // Log.d("mlocation:","errorCode="+aMapLocation.getErrorCode()+"errorInfo="+aMapLocation.getErrorInfo()); } diff --git a/app/src/main/java/com/shunzhi/parent/bean/NIMLoginResultBean.java b/app/src/main/java/com/shunzhi/parent/bean/NIMLoginResultBean.java new file mode 100644 index 0000000..ef19e1a --- /dev/null +++ b/app/src/main/java/com/shunzhi/parent/bean/NIMLoginResultBean.java @@ -0,0 +1,44 @@ +package com.shunzhi.parent.bean; + +/** + * Created by 10501 on 2018/3/19. + */ + +public class NIMLoginResultBean { + public NIMLoginResultBean() { + } + + public NIMLoginResultBean(boolean isSuccess, int resultCode, Throwable throwable) { + this.isSuccess = isSuccess; + this.resultCode = resultCode; + this.throwable = throwable; + } + + private boolean isSuccess; + private int resultCode; + private Throwable throwable; + + public boolean isSuccess() { + return isSuccess; + } + + public void setSuccess(boolean success) { + isSuccess = success; + } + + public int getResultCode() { + return resultCode; + } + + public void setResultCode(int resultCode) { + this.resultCode = resultCode; + } + + public Throwable getThrowable() { + return throwable; + } + + public void setThrowable(Throwable throwable) { + this.throwable = throwable; + } +} diff --git a/app/src/main/java/com/shunzhi/parent/contract/loginandregister/LoginAndRegisterContract.java b/app/src/main/java/com/shunzhi/parent/contract/loginandregister/LoginAndRegisterContract.java index 5de9726..68143a7 100644 --- a/app/src/main/java/com/shunzhi/parent/contract/loginandregister/LoginAndRegisterContract.java +++ b/app/src/main/java/com/shunzhi/parent/contract/loginandregister/LoginAndRegisterContract.java @@ -4,6 +4,7 @@ import com.google.gson.JsonObject; import com.share.mvpsdk.base.BasePresenter; import com.share.mvpsdk.base.IBaseFragment; import com.share.mvpsdk.base.IBaseModel; +import com.shunzhi.parent.bean.NIMLoginResultBean; import com.shunzhi.parent.bean.UserInfo; import io.reactivex.Observable; @@ -22,6 +23,8 @@ public interface LoginAndRegisterContract { public abstract void idCodeResult(String phoneNumber); public abstract void getUserInfo(String mobile,int school_id,String captcha); + + public abstract void nimLogin(String account,String password); } interface ILoginModel extends IBaseModel{ @@ -33,6 +36,8 @@ public interface LoginAndRegisterContract { //获取登录用户信息 Observable getUserInfo(String mobile, int school_id, String captcha); + + Observable nimLoginResult(String account, String token); } interface ILoginView extends IBaseFragment { diff --git a/app/src/main/java/com/shunzhi/parent/manager/MessageManager.java b/app/src/main/java/com/shunzhi/parent/manager/MessageManager.java index 2ccb4f3..e39e1de 100644 --- a/app/src/main/java/com/shunzhi/parent/manager/MessageManager.java +++ b/app/src/main/java/com/shunzhi/parent/manager/MessageManager.java @@ -1,15 +1,27 @@ package com.shunzhi.parent.manager; +import android.content.Context; +import android.content.SharedPreferences; +import android.support.annotation.NonNull; + import com.netease.nimlib.sdk.NIMClient; import com.netease.nimlib.sdk.Observer; +import com.netease.nimlib.sdk.RequestCallback; import com.netease.nimlib.sdk.auth.AuthService; import com.netease.nimlib.sdk.auth.LoginInfo; import com.netease.nimlib.sdk.msg.MsgServiceObserve; import com.netease.nimlib.sdk.msg.model.CustomNotification; import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.share.mvpsdk.utils.ToastUtils; +import com.shunzhi.parent.AppContext; +import com.shunzhi.parent.bean.NIMLoginResultBean; import java.util.List; +import io.reactivex.Observable; +import io.reactivex.subjects.PublishSubject; +import timber.log.Timber; + /** * Created by 10501 on 2018/3/17. */ @@ -20,7 +32,7 @@ public class MessageManager { static final MessageManager instance = new MessageManager(); } - public MessageManager getInstance() { + public static MessageManager getInstance() { return InstanceHolder.instance; } @@ -52,8 +64,36 @@ public class MessageManager { } - public void login(String account, String password) { - NIMClient.getService(AuthService.class).login(new LoginInfo(account, password)); + public Observable login(String account, String password) { + final PublishSubject subject = PublishSubject.create(); + SharedPreferences sp = AppContext.getInstance().getApplicationContext().getSharedPreferences("info", Context.MODE_PRIVATE); + sp.edit().putString("account", account).apply(); + sp.edit().putString("token", password).apply(); + NIMClient.getService(AuthService.class) + .login(new LoginInfo(account, password)) + .setCallback(new RequestCallback() { + @Override + public void onSuccess(Object o) { + NIMLoginResultBean bean = new NIMLoginResultBean(true, 200, null); + subject.onNext(bean); + } + + @Override + public void onFailed(int i) { + Timber.i("------nim login failed : %s", i); + ToastUtils.showToast("云信服务器登录失败:" + i); + NIMLoginResultBean bean = new NIMLoginResultBean(false, i, null); + subject.onNext(bean); + } + + @Override + public void onException(Throwable throwable) { + if (throwable != null) throwable.printStackTrace(); + NIMLoginResultBean bean = new NIMLoginResultBean(false, 0, throwable); + subject.onNext(bean); + } + }); + return subject; } @@ -62,4 +102,8 @@ public class MessageManager { NIMClient.getService(MsgServiceObserve.class).observeCustomNotification(customNotificationObserver, false); NIMClient.getService(AuthService.class).logout(); } + + public interface NIMLoginCallback { + void onResult(boolean isSuccess, int resultCode, Throwable throwable); + } } diff --git a/app/src/main/java/com/shunzhi/parent/model/loginandregister/LoginAndRegisterModel.java b/app/src/main/java/com/shunzhi/parent/model/loginandregister/LoginAndRegisterModel.java index 4f1862b..de03210 100644 --- a/app/src/main/java/com/shunzhi/parent/model/loginandregister/LoginAndRegisterModel.java +++ b/app/src/main/java/com/shunzhi/parent/model/loginandregister/LoginAndRegisterModel.java @@ -5,8 +5,10 @@ import com.share.mvpsdk.base.BaseModel; import com.share.mvpsdk.helper.RetrofitCreateHelper; import com.share.mvpsdk.helper.RxHelper; import com.shunzhi.parent.api.LoginRegisterApi; +import com.shunzhi.parent.bean.NIMLoginResultBean; import com.shunzhi.parent.bean.UserInfo; import com.shunzhi.parent.contract.loginandregister.LoginAndRegisterContract; +import com.shunzhi.parent.manager.MessageManager; import io.reactivex.Observable; @@ -47,4 +49,9 @@ public class LoginAndRegisterModel extends BaseModel implements LoginAndRegiste .compose(RxHelper.rxSchedulerHelper()); } + @Override + public Observable nimLoginResult(String account, String token) { + return MessageManager.getInstance().login(account, token); + } + } diff --git a/app/src/main/java/com/shunzhi/parent/presenter/loginandregister/LoginAndRegisterPresenter.java b/app/src/main/java/com/shunzhi/parent/presenter/loginandregister/LoginAndRegisterPresenter.java index eb26288..398e650 100644 --- a/app/src/main/java/com/shunzhi/parent/presenter/loginandregister/LoginAndRegisterPresenter.java +++ b/app/src/main/java/com/shunzhi/parent/presenter/loginandregister/LoginAndRegisterPresenter.java @@ -10,10 +10,13 @@ import com.share.mvpsdk.utils.ToastUtils; import com.shunzhi.parent.AppConfig; import com.shunzhi.parent.AppContext; import com.shunzhi.parent.bean.CurrentBean; +import com.shunzhi.parent.bean.NIMLoginResultBean; import com.shunzhi.parent.bean.UserInfo; import com.shunzhi.parent.contract.loginandregister.LoginAndRegisterContract; +import com.shunzhi.parent.manager.MessageManager; import com.shunzhi.parent.model.loginandregister.LoginAndRegisterModel; import com.shunzhi.parent.ui.fragment.loginandregistfragment.LoginAndRegistFragment; +import com.shunzhi.parent.util.Utils; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -125,12 +128,11 @@ public class LoginAndRegisterPresenter extends LoginAndRegisterContract.LoginPre } @Override - public void getUserInfo(final String mobile, int school_id, String captcha) { mRxManager.register(mIModel.getUserInfo(mobile, school_id, captcha).subscribe(new Consumer() { @Override public void accept(UserInfo userInfo) throws Exception { - Log.d("6666","userInfo="+userInfo.toString()); + Log.d("6666", "userInfo=" + userInfo.toString()); if (userInfo != null) { CurrentBean currentBean = userInfo.getData(); AppConfig.getAppConfig(AppContext.getInstance()).set(AppConfig.LOGIN_NAME, currentBean.getMobile()); @@ -138,9 +140,10 @@ public class LoginAndRegisterPresenter extends LoginAndRegisterContract.LoginPre AppConfig.getAppConfig(AppContext.getInstance()).set(AppConfig.USER_IMAGE, currentBean.getImage()); AppConfig.getAppConfig(AppContext.getInstance()).set(AppConfig.USER_SEX, String.valueOf(currentBean.getSex())); AppConfig.getAppConfig(AppContext.getInstance()).set(AppConfig.PARENT_ID, String.valueOf(currentBean.getParentId())); - AppConfig.getAppConfig(AppContext.getContext()).set(AppConfig.USER_ID,currentBean.getUserid()); - mIView.getUserInfo(0); - + AppConfig.getAppConfig(AppContext.getContext()).set(AppConfig.USER_ID, currentBean.getUserid()); + String account = currentBean.getUserid(); + String token = Utils.MD5(account); + nimLogin(account, token); } else { LoginAndRegistFragment.progressDialog.dismiss(); ToastUtils.showToast("错误"); @@ -155,6 +158,17 @@ public class LoginAndRegisterPresenter extends LoginAndRegisterContract.LoginPre })); } + @Override + public void nimLogin(String account, String password) { + mRxManager.register(mIModel.nimLoginResult(account, password).subscribe(new Consumer() { + @Override + public void accept(NIMLoginResultBean bean) throws Exception { + if (bean.isSuccess()) + mIView.getUserInfo(0); + } + })); + } + @Override public LoginAndRegisterContract.ILoginModel getModel() { diff --git a/app/src/main/java/com/shunzhi/parent/util/Utils.java b/app/src/main/java/com/shunzhi/parent/util/Utils.java new file mode 100644 index 0000000..0825343 --- /dev/null +++ b/app/src/main/java/com/shunzhi/parent/util/Utils.java @@ -0,0 +1,36 @@ +package com.shunzhi.parent.util; + +public class Utils { + private Utils() {} + + public static String MD5(String str) { + try { + java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5"); + byte[] array = md.digest(str.getBytes("utf-8")); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < array.length; ++i) { + sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3)); + } + return sb.toString().toUpperCase(); + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } + + public static String md5(String str) { + try { + java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5"); + byte[] array = md.digest(str.getBytes("utf-8")); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < array.length; ++i) { + sb.append(Integer.toHexString((array[i] & 0xff) | 0x100).substring(1, 3)); + } + return sb.toString().toUpperCase(); + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } + +} -- libgit2 0.21.0