|
@ -24,285 +24,284 @@ let server: Server = .uat2 |
|
|
var overlayView: UIView? |
|
|
var overlayView: UIView? |
|
|
|
|
|
|
|
|
@UIApplicationMain |
|
|
@UIApplicationMain |
|
|
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, MessagingDelegate { |
|
|
|
|
|
|
|
|
class AppDelegate: UIResponder, UIApplicationDelegate { |
|
|
|
|
|
|
|
|
|
|
|
var window: UIWindow? |
|
|
|
|
|
|
|
|
|
|
|
func application( |
|
|
|
|
|
_ application: UIApplication, |
|
|
|
|
|
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? |
|
|
|
|
|
) -> Bool { |
|
|
|
|
|
UIApplication.shared.applicationIconBadgeNumber = 0 |
|
|
|
|
|
|
|
|
var window: UIWindow? |
|
|
|
|
|
let gcmMessageIDKey = "gcm_message_id" |
|
|
|
|
|
var firstTranscationStatusForHome:Bool? |
|
|
|
|
|
var firstTranscationStatusForProfileForm:Bool? |
|
|
|
|
|
|
|
|
NetworkActivityLogger.shared.startLogging() |
|
|
|
|
|
NetworkActivityLogger.shared.level = .debug |
|
|
|
|
|
|
|
|
var cmRegistrationId: String? |
|
|
|
|
|
|
|
|
IQKeyboardManager.shared.enable = true |
|
|
|
|
|
IQKeyboardManager.shared.shouldResignOnTouchOutside = true |
|
|
|
|
|
FirebaseApp.configure() |
|
|
|
|
|
Fabric.with([Crashlytics.self]) |
|
|
|
|
|
|
|
|
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { |
|
|
|
|
|
UIApplication.shared.applicationIconBadgeNumber = 0 |
|
|
|
|
|
firstTranscationStatusForHome = true |
|
|
|
|
|
firstTranscationStatusForProfileForm = true |
|
|
|
|
|
|
|
|
|
|
|
NetworkActivityLogger.shared.startLogging() |
|
|
|
|
|
NetworkActivityLogger.shared.level = .debug |
|
|
|
|
|
|
|
|
|
|
|
IQKeyboardManager.shared.enable = true |
|
|
|
|
|
IQKeyboardManager.shared.shouldResignOnTouchOutside = true |
|
|
|
|
|
FirebaseApp.configure() |
|
|
|
|
|
Fabric.with([Crashlytics.self]) |
|
|
|
|
|
|
|
|
|
|
|
Fabric.sharedSDK().debug = true |
|
|
|
|
|
Messaging.messaging().delegate = self |
|
|
|
|
|
registerForNotification(application: application) |
|
|
|
|
|
setUUID() |
|
|
|
|
|
setupNavBar() |
|
|
|
|
|
setupStatusBar() |
|
|
|
|
|
setEntryPoint() |
|
|
|
|
|
if #available(iOS 10.0, *) { |
|
|
|
|
|
UNUserNotificationCenter.current().delegate = self |
|
|
|
|
|
} else { |
|
|
|
|
|
// Fallback on earlier versions |
|
|
|
|
|
} |
|
|
|
|
|
return true |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private func setUUID() { |
|
|
|
|
|
if UserDefaults.standard.string(forKey: AppConstants.uuid) == nil { |
|
|
|
|
|
let uuid = UUID().uuidString |
|
|
|
|
|
UserDefaults.standard.set(uuid, forKey: AppConstants.uuid) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
Fabric.sharedSDK().debug = true |
|
|
|
|
|
Messaging.messaging().delegate = self |
|
|
|
|
|
|
|
|
private func setupStatusBar() { |
|
|
|
|
|
// let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView |
|
|
|
|
|
// if statusBar.responds(to:#selector(setter: UIView.backgroundColor)) { |
|
|
|
|
|
// statusBar.backgroundColor = UIColor.blue |
|
|
|
|
|
// } |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
let center = UNUserNotificationCenter.current() |
|
|
|
|
|
center.delegate = self |
|
|
|
|
|
center.requestAuthorization(options: [.alert, .sound, .badge]) { (_, _) in} |
|
|
|
|
|
application.registerForRemoteNotifications() |
|
|
|
|
|
|
|
|
private func setupNavBar() { |
|
|
|
|
|
let appearance = UINavigationBar.appearance() |
|
|
|
|
|
appearance.backIndicatorImage = #imageLiteral(resourceName: "backIconBlack") |
|
|
|
|
|
appearance.backIndicatorTransitionMaskImage = #imageLiteral(resourceName: "backIconBlack") |
|
|
|
|
|
appearance.tintColor = UIColor.black |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private func setEntryPoint() { |
|
|
|
|
|
|
|
|
|
|
|
// check user status |
|
|
|
|
|
|
|
|
|
|
|
guard let _ = KeyChain.shared.get(key: .email), |
|
|
|
|
|
(KeyChain.shared.get(key: .login) ?? "1") == "1" ? true : false else { |
|
|
|
|
|
self.goSplashScreen() |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
let biometricAuthenticationWireframe = BiometricAuthenticationWireframe() |
|
|
|
|
|
biometricAuthenticationWireframe.openWithDelegate( |
|
|
|
|
|
on: self.window!, |
|
|
|
|
|
delegate: self |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
print("FCM Token: \(Messaging.messaging().fcmToken ?? "nil")") |
|
|
|
|
|
|
|
|
private func registerForNotification(application: UIApplication) { |
|
|
|
|
|
|
|
|
|
|
|
let settings: UIUserNotificationSettings = |
|
|
|
|
|
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil) |
|
|
|
|
|
application.registerForRemoteNotifications() |
|
|
|
|
|
application.registerUserNotificationSettings(settings) |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
setUUID() |
|
|
|
|
|
setupNavBar() |
|
|
|
|
|
setEntryPoint() |
|
|
|
|
|
|
|
|
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) { |
|
|
|
|
|
|
|
|
|
|
|
if userInfo[gcmMessageIDKey] != nil { |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
return true |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func application( |
|
|
|
|
|
_ application: UIApplication, |
|
|
|
|
|
didReceiveRemoteNotification userInfo: [AnyHashable: Any] |
|
|
|
|
|
) { } |
|
|
|
|
|
|
|
|
|
|
|
func application( |
|
|
|
|
|
_ application: UIApplication, |
|
|
|
|
|
didReceiveRemoteNotification userInfo: [AnyHashable: Any], |
|
|
|
|
|
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void |
|
|
|
|
|
) { } |
|
|
|
|
|
|
|
|
|
|
|
func application( |
|
|
|
|
|
_ application: UIApplication, |
|
|
|
|
|
didFailToRegisterForRemoteNotificationsWithError error: Error |
|
|
|
|
|
) { } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func application( |
|
|
|
|
|
_ application: UIApplication, |
|
|
|
|
|
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data |
|
|
|
|
|
) { |
|
|
|
|
|
let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)}) |
|
|
|
|
|
print("APNs device token: \(deviceTokenString)") |
|
|
|
|
|
|
|
|
|
|
|
Messaging.messaging().apnsToken = deviceToken |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func applicationDidEnterBackground(_ application: UIApplication) { |
|
|
|
|
|
let store = UserDefaults.standard |
|
|
|
|
|
let language = Localize.currentLanguage() |
|
|
|
|
|
store.set(language, forKey: AppConstants.currentLanguage) |
|
|
|
|
|
|
|
|
|
|
|
let viewcontroller = UIViewController() |
|
|
|
|
|
viewcontroller.view.backgroundColor = AppConstants.themeRedColor |
|
|
|
|
|
viewcontroller.view.frame = UIScreen.main.bounds |
|
|
|
|
|
|
|
|
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], |
|
|
|
|
|
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
overlayView = viewcontroller.view |
|
|
|
|
|
|
|
|
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) { |
|
|
|
|
|
cmRegistrationId = fcmToken |
|
|
|
|
|
|
|
|
|
|
|
print(fcmToken) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
guard let view = overlayView else {return} |
|
|
|
|
|
|
|
|
|
|
|
let topView = UIApplication.shared.keyWindow?.subviews.last |
|
|
|
|
|
topView?.addSubview(view) |
|
|
|
|
|
topView?.bringSubview(toFront: view) |
|
|
|
|
|
|
|
|
func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) { |
|
|
|
|
|
print(remoteMessage.appData) |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func applicationWillEnterForeground(_ application: UIApplication) { |
|
|
|
|
|
if let language = UserDefaults.standard.string(forKey: AppConstants.currentLanguage) { |
|
|
|
|
|
Localize.setCurrentLanguage(language) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
overlayView?.removeFromSuperview() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// MARK: - Other Functions |
|
|
|
|
|
extension AppDelegate { |
|
|
|
|
|
private func setUUID() { |
|
|
|
|
|
if UserDefaults.standard.string(forKey: AppConstants.uuid) == nil { |
|
|
|
|
|
let uuid = UUID().uuidString |
|
|
|
|
|
UserDefaults.standard.set(uuid, forKey: AppConstants.uuid) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@available(iOS 10.0, *) |
|
|
|
|
|
func userNotificationCenter(_ center: UNUserNotificationCenter, |
|
|
|
|
|
willPresent notification: UNNotification, |
|
|
|
|
|
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { |
|
|
|
|
|
// var userInfo = notification.request.content.userInfo |
|
|
|
|
|
|
|
|
|
|
|
// if let aps = userInfo["aps"] as? NSDictionary, |
|
|
|
|
|
// let alert = aps["alert"] as? NSDictionary, |
|
|
|
|
|
// let body = alert["body"] as? String, |
|
|
|
|
|
// let title = alert["title"] as? String { |
|
|
|
|
|
// let image = UIImage.init(named: "ic_gme") |
|
|
|
|
|
// let banner = Banner(title: title, subtitle: body, image: image, backgroundColor: UIColor(red:0.93, green:0.11, blue:0.14, alpha:1.0)) |
|
|
|
|
|
// banner.show(duration: 5.0) |
|
|
|
|
|
// } |
|
|
|
|
|
completionHandler( |
|
|
|
|
|
[UNNotificationPresentationOptions.alert, |
|
|
|
|
|
UNNotificationPresentationOptions.sound, |
|
|
|
|
|
UNNotificationPresentationOptions.badge]) |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private func setupNavBar() { |
|
|
|
|
|
let appearance = UINavigationBar.appearance() |
|
|
|
|
|
appearance.backIndicatorImage = #imageLiteral(resourceName: "backIconBlack") |
|
|
|
|
|
appearance.backIndicatorTransitionMaskImage = #imageLiteral(resourceName: "backIconBlack") |
|
|
|
|
|
appearance.tintColor = UIColor.black |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private func setEntryPoint() { |
|
|
|
|
|
guard let _ = KeyChain.shared.get(key: .email), |
|
|
|
|
|
(KeyChain.shared.get(key: .login) ?? "1") == "1" ? true : false else { |
|
|
|
|
|
self.goSplashScreen() |
|
|
|
|
|
return |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
let biometricAuthenticationWireframe = BiometricAuthenticationWireframe() |
|
|
|
|
|
biometricAuthenticationWireframe.openWithDelegate( |
|
|
|
|
|
on: self.window!, |
|
|
|
|
|
delegate: self |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private func doLogin(){ |
|
|
|
|
|
self.window?.rootViewController?.showProgressHud() |
|
|
|
|
|
|
|
|
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { |
|
|
|
|
|
// print("Unable to register for remote notifications: \(error.localizedDescription)") |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
let loginService = LoginService() |
|
|
|
|
|
|
|
|
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
guard let userID = KeyChain.shared.get(key: .email), |
|
|
|
|
|
let password = KeyChain.shared.get(key: .password) else { |
|
|
|
|
|
self.goSplashScreen() |
|
|
|
|
|
return |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
method for redirection of page when push notification tap |
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
func applicationDidEnterBackground(_ application: UIApplication) { |
|
|
|
|
|
let store = UserDefaults.standard |
|
|
|
|
|
let language = Localize.currentLanguage() |
|
|
|
|
|
store.set(language, forKey: AppConstants.currentLanguage) |
|
|
|
|
|
|
|
|
loginService._login( |
|
|
|
|
|
userId: userID, |
|
|
|
|
|
password: password, |
|
|
|
|
|
success: { (user) in |
|
|
|
|
|
let accessCode = user?.accessCode ?? "" |
|
|
|
|
|
let accessCodeBase64 = accessCode |
|
|
|
|
|
Utility.save(user: user, accessCodeBase64: accessCodeBase64, password: password, login: true) |
|
|
|
|
|
|
|
|
let viewcontroller = UIViewController() |
|
|
|
|
|
viewcontroller.view.backgroundColor = AppConstants.themeRedColor |
|
|
|
|
|
viewcontroller.view.frame = UIScreen.main.bounds |
|
|
|
|
|
|
|
|
let mainWireFrame = MainWireframe.shared |
|
|
|
|
|
let tabBarViewController = mainWireFrame?.getMainView() |
|
|
|
|
|
let sidemenuVc = UIStoryboard(name: "SideMenu", bundle: nil).instantiateViewController(withIdentifier: "SideMenuViewController") as! SideMenuViewController |
|
|
|
|
|
|
|
|
overlayView = viewcontroller.view |
|
|
|
|
|
|
|
|
let sideMenuController = LGSideMenuController(rootViewController: tabBarViewController, leftViewController: sidemenuVc, rightViewController: nil) |
|
|
|
|
|
|
|
|
guard let view = overlayView else {return} |
|
|
|
|
|
|
|
|
|
|
|
let topView = UIApplication.shared.keyWindow?.subviews.last |
|
|
|
|
|
topView?.addSubview(view) |
|
|
|
|
|
topView?.bringSubview(toFront: view) |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func applicationWillEnterForeground(_ application: UIApplication) { |
|
|
|
|
|
if let language = UserDefaults.standard.string(forKey: AppConstants.currentLanguage) { |
|
|
|
|
|
Localize.setCurrentLanguage(language) |
|
|
|
|
|
|
|
|
sideMenuController.rootViewLayerShadowColor = UIColor(white: 0.9, alpha: 0.6) |
|
|
|
|
|
sideMenuController.rootViewLayerShadowRadius = 8.0 |
|
|
|
|
|
sideMenuController.leftViewPresentationStyle = .scaleFromBig |
|
|
|
|
|
sideMenuController.leftViewWidth = UIScreen.main.bounds.width - 70.0 |
|
|
|
|
|
|
|
|
|
|
|
if #available(iOS 10.0, *) { |
|
|
|
|
|
sideMenuController.leftViewBackgroundBlurEffect = UIBlurEffect(style: .regular) |
|
|
|
|
|
} else { |
|
|
|
|
|
// Fallback on earlier versions |
|
|
} |
|
|
} |
|
|
overlayView?.removeFromSuperview() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private func doLogin(){ |
|
|
|
|
|
self.window?.rootViewController?.showProgressHud() |
|
|
|
|
|
|
|
|
self.window?.rootViewController?.hideProgressHud() |
|
|
|
|
|
|
|
|
let loginService = LoginService() |
|
|
|
|
|
|
|
|
self.window?.backgroundColor = sidemenuVc.view.backgroundColor |
|
|
|
|
|
self.window?.rootViewController = sideMenuController |
|
|
|
|
|
|
|
|
guard let userID = KeyChain.shared.get(key: .email), |
|
|
|
|
|
let password = KeyChain.shared.get(key: .password) else { |
|
|
|
|
|
self.goSplashScreen() |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
loginService._login( |
|
|
|
|
|
userId: userID, |
|
|
|
|
|
password: password, |
|
|
|
|
|
success: { (user) in |
|
|
|
|
|
let accessCode = user?.accessCode ?? "" |
|
|
|
|
|
let accessCodeBase64 = accessCode |
|
|
|
|
|
Utility.save(user: user, accessCodeBase64: accessCodeBase64, password: password, login: true) |
|
|
|
|
|
|
|
|
|
|
|
let mainWireFrame = MainWireframe.shared |
|
|
|
|
|
let tabBarViewController = mainWireFrame?.getMainView() |
|
|
|
|
|
let sidemenuVc = UIStoryboard(name: "SideMenu", bundle: nil).instantiateViewController(withIdentifier: "SideMenuViewController") as! SideMenuViewController |
|
|
|
|
|
|
|
|
|
|
|
let sideMenuController = LGSideMenuController(rootViewController: tabBarViewController, leftViewController: sidemenuVc, rightViewController: nil) |
|
|
|
|
|
|
|
|
|
|
|
sideMenuController.rootViewLayerShadowColor = UIColor(white: 0.9, alpha: 0.6) |
|
|
|
|
|
sideMenuController.rootViewLayerShadowRadius = 8.0 |
|
|
|
|
|
sideMenuController.leftViewPresentationStyle = .scaleFromBig |
|
|
|
|
|
sideMenuController.leftViewWidth = UIScreen.main.bounds.width - 70.0 |
|
|
|
|
|
|
|
|
|
|
|
if #available(iOS 10.0, *) { |
|
|
|
|
|
sideMenuController.leftViewBackgroundBlurEffect = UIBlurEffect(style: .regular) |
|
|
|
|
|
} else { |
|
|
|
|
|
// Fallback on earlier versions |
|
|
|
|
|
} |
|
|
|
|
|
self.window?.rootViewController?.hideProgressHud() |
|
|
|
|
|
|
|
|
|
|
|
self.window?.backgroundColor = sidemenuVc.view.backgroundColor |
|
|
|
|
|
self.window?.rootViewController = sideMenuController |
|
|
|
|
|
|
|
|
|
|
|
}) { (error) in |
|
|
|
|
|
self.window?.rootViewController?.hideProgressHud() |
|
|
|
|
|
self.window?.rootViewController?.alert(message: error.localizedDescription, title: "Warning"){ |
|
|
|
|
|
// if failed login, remove all in keychain, change logout status and then go splash screen |
|
|
|
|
|
KeyChain.shared.removeAll() |
|
|
|
|
|
self.goSplashScreen() |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private func goSplashScreen() { |
|
|
|
|
|
let splashWireframe = SplashScreenWireframe() |
|
|
|
|
|
let nav = UINavigationController.init(rootViewController: splashWireframe.getMainView()) |
|
|
|
|
|
self.window?.rootViewController = nav |
|
|
|
|
|
|
|
|
}) { (error) in |
|
|
|
|
|
self.window?.rootViewController?.hideProgressHud() |
|
|
|
|
|
self.window?.rootViewController?.alert(message: error.localizedDescription, title: "Warning"){ |
|
|
|
|
|
// if failed login, remove all in keychain, change logout status and then go splash screen |
|
|
|
|
|
KeyChain.shared.removeAll() |
|
|
|
|
|
self.goSplashScreen() |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private func goSplashScreen() { |
|
|
|
|
|
let splashWireframe = SplashScreenWireframe() |
|
|
|
|
|
let nav = UINavigationController.init(rootViewController: splashWireframe.getMainView()) |
|
|
|
|
|
self.window?.rootViewController = nav |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// MARK: - UNUserNotificationCenterDelegate |
|
|
|
|
|
extension AppDelegate: UNUserNotificationCenterDelegate { |
|
|
|
|
|
func userNotificationCenter( |
|
|
|
|
|
_ center: UNUserNotificationCenter, |
|
|
|
|
|
willPresent notification: UNNotification, |
|
|
|
|
|
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void |
|
|
|
|
|
) { |
|
|
|
|
|
let userInfo = notification.request.content.userInfo |
|
|
|
|
|
print("Message ID: \(userInfo["gcm_message_id"] ?? "nil")") |
|
|
|
|
|
|
|
|
|
|
|
completionHandler([ |
|
|
|
|
|
UNNotificationPresentationOptions.alert, |
|
|
|
|
|
UNNotificationPresentationOptions.sound, |
|
|
|
|
|
UNNotificationPresentationOptions.badge |
|
|
|
|
|
]) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func userNotificationCenter( |
|
|
|
|
|
_ center: UNUserNotificationCenter, |
|
|
|
|
|
didReceive response: UNNotificationResponse, |
|
|
|
|
|
withCompletionHandler completionHandler: @escaping () -> Void |
|
|
|
|
|
) { |
|
|
|
|
|
let userInfo = response.notification.request.content.userInfo |
|
|
|
|
|
print("Message ID: \(userInfo["gcm_message_id"] ?? "nil")") |
|
|
|
|
|
|
|
|
|
|
|
print(userInfo) |
|
|
|
|
|
completionHandler() |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// MARK: - MessagingDelegate |
|
|
|
|
|
extension AppDelegate: MessagingDelegate { |
|
|
|
|
|
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) { |
|
|
|
|
|
print("Firebase registration token: \(fcmToken)") |
|
|
|
|
|
|
|
|
|
|
|
let userInfo = ["token": fcmToken] |
|
|
|
|
|
NotificationCenter.default.post( |
|
|
|
|
|
name: Notification.Name("FCMToken"), |
|
|
|
|
|
object: nil, |
|
|
|
|
|
userInfo: userInfo |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) { |
|
|
|
|
|
print("Received data message: \(remoteMessage.appData)") |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// MARK: - BiometricAuthenticationViewControllerDelegate |
|
|
// MARK: - BiometricAuthenticationViewControllerDelegate |
|
|
extension AppDelegate: BiometricAuthenticationViewControllerDelegate{ |
|
|
extension AppDelegate: BiometricAuthenticationViewControllerDelegate{ |
|
|
func viewController(_ viewController: BiometricAuthenticationViewController, informationTitleLabel titleLabel: UILabel) { |
|
|
|
|
|
titleLabel.text = "bio_login_intro_text".localized() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func didComplete(_ viewController: BiometricAuthenticationViewController) { |
|
|
|
|
|
self.doLogin() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
func viewController( |
|
|
|
|
|
_ viewController: BiometricAuthenticationViewController, |
|
|
|
|
|
informationTitleLabel titleLabel: UILabel |
|
|
|
|
|
) { |
|
|
|
|
|
titleLabel.text = "bio_login_intro_text".localized() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func didComplete(_ viewController: BiometricAuthenticationViewController) { |
|
|
|
|
|
self.doLogin() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func viewController( |
|
|
|
|
|
_ viewController: BiometricAuthenticationViewController, |
|
|
|
|
|
didFailWithError error: Error, |
|
|
|
|
|
errorMessage: String? |
|
|
|
|
|
) { |
|
|
|
|
|
print("BiometricAuthenticationWireframe Error: \(errorMessage ?? "")") |
|
|
|
|
|
|
|
|
func viewController(_ viewController: BiometricAuthenticationViewController, didFailWithError error: Error, errorMessage: String?) { |
|
|
|
|
|
print("BiometricAuthenticationWireframe Error: \(errorMessage ?? "")") |
|
|
|
|
|
|
|
|
// if don't use biometric authentication or user press password |
|
|
|
|
|
DispatchQueue.main.async { |
|
|
|
|
|
if let error = error as? BiometricAuthenticationError { |
|
|
|
|
|
|
|
|
// if don't use biometric authentication or user press password |
|
|
|
|
|
DispatchQueue.main.async { |
|
|
|
|
|
if let error = error as? BiometricAuthenticationError { |
|
|
|
|
|
|
|
|
|
|
|
switch error { |
|
|
|
|
|
case .biometryNotAvailable, .userFallback: |
|
|
|
|
|
let secureKeypad = SecureKeypad(target: viewController) |
|
|
|
|
|
|
|
|
|
|
|
secureKeypad.title = "Password of your account" |
|
|
|
|
|
secureKeypad.placeholder = "Enter your password for login" |
|
|
|
|
|
secureKeypad.placeholderFont = UIFont(name: "Arial", size: 15) |
|
|
|
|
|
|
|
|
|
|
|
secureKeypad.delegate = self |
|
|
|
|
|
secureKeypad.present(animated: true) |
|
|
|
|
|
default: |
|
|
|
|
|
break |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
switch error { |
|
|
|
|
|
case .biometryNotAvailable, .userFallback: |
|
|
|
|
|
let secureKeypad = SecureKeypad(target: viewController) |
|
|
|
|
|
|
|
|
|
|
|
secureKeypad.title = "Password of your account" |
|
|
|
|
|
secureKeypad.placeholder = "Enter your password for login" |
|
|
|
|
|
secureKeypad.placeholderFont = UIFont(name: "Arial", size: 15) |
|
|
|
|
|
|
|
|
|
|
|
secureKeypad.delegate = self |
|
|
|
|
|
secureKeypad.present(animated: true) |
|
|
|
|
|
default: |
|
|
|
|
|
break |
|
|
} |
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func doSelectLocalAuthenticationPolicy(_ viewController: BiometricAuthenticationViewController) -> BiometricAuthenticationPolicy{ |
|
|
|
|
|
return .deviceOwnerAuthenticationWithBiometrics |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func doSelectLocalAuthenticationPolicy(_ viewController: BiometricAuthenticationViewController) -> BiometricAuthenticationPolicy { |
|
|
|
|
|
return .deviceOwnerAuthenticationWithBiometrics |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// MARK: - SecureKeypadDelegate |
|
|
// MARK: - SecureKeypadDelegate |
|
|
extension AppDelegate: SecureKeypadDelegate { |
|
|
extension AppDelegate: SecureKeypadDelegate { |
|
|
func didComplete(_ encryptedString: String) { |
|
|
|
|
|
if encryptedString != "" { |
|
|
|
|
|
KeyChain.shared.save(data: encryptedString, key: .password) |
|
|
|
|
|
self.doLogin() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
func didComplete(_ encryptedString: String) { |
|
|
|
|
|
if encryptedString != "" { |
|
|
|
|
|
KeyChain.shared.save(data: encryptedString, key: .password) |
|
|
|
|
|
self.doLogin() |
|
|
} |
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |