浏览代码

[주모][New] 로그아웃 처리 시 fcm 토큰 삭제

hyodong.min 6 年之前
父节点
当前提交
6c338b7f0e

+ 0 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/activity/AppInitializer.java

@@ -99,7 +99,6 @@ public class AppInitializer {
 
     // to guest setting
     ContentsFlagHelper.getInstance().dispose();
-    ContentsFlagHelper.getInstance().load().subscribe();
 
     // member info
     MemberInfoModelHelper.getInstance().dispose();

+ 15 - 7
app/src/main/java/kr/co/zumo/app/lifeplus/helper/FirebaseMessagingHelper.java

@@ -14,10 +14,8 @@ import io.reactivex.schedulers.Schedulers;
 import kr.co.zumo.app.lifeplus.bean.api.TokenRequestBean;
 import kr.co.zumo.app.lifeplus.config.NetworkConfig;
 import kr.co.zumo.app.lifeplus.model.BasicParamProvider;
-import kr.co.zumo.app.lifeplus.model.SuperModel;
 import kr.co.zumo.app.lifeplus.network.api.LifeplusAPIRepository;
 import kr.co.zumo.app.lifeplus.network.api.ParameterMapper;
-import kr.co.zumo.app.lifeplus.util.StringUtil;
 import kr.co.zumo.app.lifeplus.view.ToastProvider;
 
 /**
@@ -87,24 +85,34 @@ public class FirebaseMessagingHelper {
    * @param token
    */
   public void sendRegistrationToServer(String token) {
-    if (StringUtil.isEmpty(SuperModel.getInstance().getUserId())) {
-      Log.d("APP# FirebaseMessagingHelper | sendRegistrationToServer", "|" + "guest skip....");
-      return;
-    }
+    sendRegistrationToServer(token, () -> {}, () -> {});
+  }
+
+  /**
+   * token 서버에 저장 및 피드백
+   *
+   * @param token
+   * @param successRunnable
+   * @param failRunnable
+   */
+  public void sendRegistrationToServer(String token, Runnable successRunnable, Runnable failRunnable) {
     disposable = new LifeplusAPIRepository().saveFcmToken(new ParameterMapper<TokenRequestBean>().map(new BasicParamProvider(), new TokenRequestBean(token)))
       .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
       .subscribe(resultBean -> {
         if (resultBean.isSuccess()) {
           Log.d("APP# FirebaseMessagingHelper | sendRegistrationToServer", "|" + "         token saved..");
+          successRunnable.run();
         }
         else {
           Log.d("APP# FirebaseMessagingHelper | sendRegistrationToServer", "|" + resultBean.getReturnMessage());
+          ToastProvider.showNative(resultBean.getReturnMessage());
+          failRunnable.run();
         }
       }, e -> {
         Log.e("APP#  FirebaseMessagingHelper | sendRegistrationToServer", "|" + "token saving error");
         ToastProvider.showNative("token saving error");
+        failRunnable.run();
       });
-
   }
 
   /**

+ 19 - 5
app/src/main/java/kr/co/zumo/app/lifeplus/model/module/APILogoutModule.java

@@ -5,10 +5,12 @@ package kr.co.zumo.app.lifeplus.model.module;
 
 import android.util.Log;
 
+import io.reactivex.Observable;
 import io.reactivex.Single;
 import kr.co.zumo.app.lifeplus.activity.AppInitializer;
 import kr.co.zumo.app.lifeplus.bean.api.LifeplusAPIBean;
 import kr.co.zumo.app.lifeplus.bean.api.RequestBean;
+import kr.co.zumo.app.lifeplus.helper.FirebaseMessagingHelper;
 
 /**
  * APILogoutModule
@@ -26,11 +28,23 @@ public class APILogoutModule extends LifeplusAPIModule<RequestBean, LifeplusAPIB
     // logout
     Log.d("APP# APILogoutModule | getAPI", "|" + " ________________________________ logout");
 
-    return Single.fromCallable(() -> {
+    return Single.fromObservable(
+      Observable.create(emitter -> {
+        FirebaseMessagingHelper.getInstance().sendRegistrationToServer("", () -> {
+          // token removed
+          AppInitializer.logout();
+          if (emitter.isDisposed() == false) {
+            emitter.onNext(new LifeplusAPIBean(LifeplusAPIBean.RETURN_SUCCESS, ""));
+            emitter.onComplete(); // single 이기 때문에 complete 시켜야 발행된다.
+          }
+        }, () -> {
+          // error
+          if (emitter.isDisposed() == false) {
+            emitter.onError(new Exception());
+          }
+        });
+      })
+    );
 
-      AppInitializer.logout();
-
-      return new LifeplusAPIBean(LifeplusAPIBean.RETURN_SUCCESS, "");
-    });
   }
 }

+ 12 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/setting/member/SettingMemberInfoModel.java

@@ -43,6 +43,7 @@ public class SettingMemberInfoModel extends Model {
   private Disposable disposablePolicy;
   private Disposable disposableEmail;
   private Disposable disposableSms;
+  private Disposable disposableLogout;
   private MemberInfoBean memberInfoBean;
   private String inputName;
   private List<Boolean> backups;
@@ -99,6 +100,7 @@ public class SettingMemberInfoModel extends Model {
       disposableSms.dispose();
       disposableSms = null;
     }
+    stopLogout();
   }
 
   /**
@@ -334,14 +336,23 @@ public class SettingMemberInfoModel extends Model {
     return false;
   }
 
+  private void stopLogout() {
+    if (null != disposableLogout) {
+      disposableLogout.dispose();
+      disposableLogout = null;
+    }
+  }
+
   /**
    * 로그아웃
    *
    * @param runnable
    */
   public void logout(Runnable runnable) {
+    stopLogout();
+
     // 로그아웃 처리
-    new APILogoutModule().call(new RequestBean(), new APIModuleListener<LifeplusAPIBean>() {
+    disposableLogout = new APILogoutModule().call(new RequestBean(), new APIModuleListener<LifeplusAPIBean>() {
       @Override
       public void onApiSuccess(LifeplusAPIBean resultBean) {
         runnable.run();