From e45071f392dda78fb2663e85253df7b33552ffcb Mon Sep 17 00:00:00 2001 From: Gk40002148 Date: Tue, 26 Apr 2022 15:56:57 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=AD=E3=82=B0=E3=82=A4=E3=83=B3=E6=99=82?= =?UTF-8?q?=E3=81=AE=E5=87=A6=E7=90=86=E3=81=AE=E6=B5=81=E3=82=8C=E3=82=92?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Login/Presenter/LoginPresenter.swift | 46 ++++++++++--------- .../Login/View/LoginViewController.swift | 41 ++++++++++++----- 2 files changed, 54 insertions(+), 33 deletions(-) diff --git a/AgileWorks/AgileWorks/Login/Presenter/LoginPresenter.swift b/AgileWorks/AgileWorks/Login/Presenter/LoginPresenter.swift index 4b67173..0541a99 100644 --- a/AgileWorks/AgileWorks/Login/Presenter/LoginPresenter.swift +++ b/AgileWorks/AgileWorks/Login/Presenter/LoginPresenter.swift @@ -11,6 +11,7 @@ import UIKit protocol LoginPresenter: AnyObject { func fetch(completion: @escaping (APIResult) -> Void) + func registDevice(completion: @escaping (APIResult) -> Void) } class LoginPresenterImpl { @@ -39,27 +40,6 @@ extension LoginPresenterImpl: LoginPresenter { oauth.fetch { result in switch result { case .success: - // 前回ログアウト時にオフラインだった等の理由で以前ログインしていた時に - // 使っていた FCM インスタンスが残っている場合があるので、 - // このタイミングでいったん削除。 - // 使いまわしてしまうと前回ログイン時のアカウントへの通知も届いてしまう。 - // 一応、アプリ起動時にもインスタンスの作り直しは行っているものの、 - // そのタイミングでオンラインである保証はないのでここでも行うことで確実を期している。 - FirebaseSupport.removeInstanceIDOnDemand { error in - if let error = error { - log.e(error) - completion(.failure(error)) - } else { - self.devcie { result in - switch result { - case .success: - completion(.success(true)) - case .failure(let error): - completion(.failure(error)) - } - } - } - } completion(.success(true)) case .failure(let error): log.e(error) @@ -68,6 +48,30 @@ extension LoginPresenterImpl: LoginPresenter { } } + func registDevice(completion: @escaping (APIResult) -> Void) { + // 前回ログアウト時にオフラインだった等の理由で以前ログインしていた時に + // 使っていた FCM インスタンスが残っている場合があるので、 + // このタイミングでいったん削除。 + // 使いまわしてしまうと前回ログイン時のアカウントへの通知も届いてしまう。 + // 一応、アプリ起動時にもインスタンスの作り直しは行っているものの、 + // そのタイミングでオンラインである保証はないのでここでも行うことで確実を期している。 + FirebaseSupport.removeInstanceIDOnDemand { error in + if let error = error { + log.e(error) + completion(.failure(error)) + } else { + self.devcie { result in + switch result { + case .success: + completion(.success(true)) + case .failure(let error): + completion(.failure(error)) + } + } + } + } + } + private func devcie(completion: @escaping (APIResult) -> Void) { DeviceService().requestDevice { result in switch result { diff --git a/AgileWorks/AgileWorks/Login/View/LoginViewController.swift b/AgileWorks/AgileWorks/Login/View/LoginViewController.swift index efbfca4..6b8cc5b 100644 --- a/AgileWorks/AgileWorks/Login/View/LoginViewController.swift +++ b/AgileWorks/AgileWorks/Login/View/LoginViewController.swift @@ -134,19 +134,26 @@ class LoginViewController: UIViewController { presenter.fetch { result in switch result { case .success: - self.setSessionId() + self.registDevice() case .failure(let error): log.e(error) - DispatchQueue.main.async { - let message = getLocalizableStrings(key: "LoginErrorMessage", comment: "") - let okAction = UIAlertAction(title: getLocalizableStrings(key: "OK", comment: ""), style: .default, handler: nil) - AppDelegate.shared.rootViewController.showAlertScreen(view: self, title: "", message: message, defaultAction: okAction, cancelAction: nil) - self.enableLogin() - } + self.showLoginError(isLogout: false) } } } + private func registDevice() { + // デバイス登録 + presenter.registDevice { result in + switch result { + case .success: + self.setSessionId() + case .failure(let error): + log.e(error) + self.showLoginError(isLogout: true) + } + } + } //sessionIdの取得 private func setSessionId() { let sessionEndpoint = GetSessionEndpoint() @@ -164,11 +171,7 @@ class LoginViewController: UIViewController { // セッション情報取得失敗 case .failure(let error): log.e(error) - DispatchQueue.main.async { - let message = getLocalizableStrings(key: "LoginErrorMessage", comment: "") - let defaultAction = AppDelegate.shared.rootViewController.logoutDefaultAction(title: getLocalizableStrings(key: "OK", comment: "")) - AppDelegate.shared.rootViewController.showAlertScreen(view: self, title: "", message: message, defaultAction: defaultAction, cancelAction: nil) - } + self.showLoginError(isLogout: true) } } } @@ -247,6 +250,20 @@ class LoginViewController: UIViewController { } } + private func showLoginError(isLogout: Bool) { + DispatchQueue.main.async { + let message = getLocalizableStrings(key: "LoginErrorMessage", comment: "") + let defaultAction: UIAlertAction + if isLogout { + defaultAction = AppDelegate.shared.rootViewController.logoutDefaultAction(title: getLocalizableStrings(key: "OK", comment: "")) + } else { + defaultAction = UIAlertAction(title: getLocalizableStrings(key: "OK", comment: ""), style: .default, handler: nil) + } + AppDelegate.shared.rootViewController.showAlertScreen(view: self, title: "", message: message, defaultAction: defaultAction, cancelAction: nil) + self.enableLogin() + } + } + @IBAction private func clientCertificateRemovalTapped(_ sender: Any) { let alertController = UIAlertController(title: "", message: getLocalizableStrings(key: "ClientCertificateRemovalConfirmation", comment: ""), preferredStyle: .alert) let okAction = UIAlertAction(title: getLocalizableStrings(key: "ClientCertificateRemovalOK", comment: ""), style: .default) { _ in -- GitLab