// // AppDelegate.swift // GMERemittance // // Created by Fm-user on 11/30/17. // Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit import Firebase import FirebaseAuth import UserNotifications import FirebaseInstanceID import FirebaseMessaging import BRYXBanner import Fabric import Crashlytics import AlamofireNetworkActivityLogger import IQKeyboardManagerSwift import LGSideMenuController let server: Server = .stagging @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, MessagingDelegate { var window: UIWindow? let gcmMessageIDKey = "gcm_message_id" var firstTranscationStatusForHome:Bool? var firstTranscationStatusForProfileForm:Bool? var cmRegistrationId: String? var notificationSet: Box = Box(nil) 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 FirebaseApp.configure() Fabric.with([Crashlytics.self]) Fabric.sharedSDK().debug = true Messaging.messaging().delegate = self registerForNotification(application: application) setUUID() setupNavBar() setupStatusBar() setEntryPoint() return true } private func setUUID() { if UserDefaults.standard.string(forKey: AppConstants.uuid) == nil { let uuid = UUID().uuidString UserDefaults.standard.set(uuid, forKey: AppConstants.uuid) } } 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 // } } private func setupNavBar() { let appearance = UINavigationBar.appearance() appearance.backIndicatorImage = #imageLiteral(resourceName: "backIconBlack") appearance.backIndicatorTransitionMaskImage = #imageLiteral(resourceName: "backIconBlack") appearance.tintColor = UIColor.black } private func setEntryPoint() { let _default = UserDefaults.standard if let loginStatus = _default.string(forKey: UserKeys.accessCode) { // user is logged in let mainWireFrame = MainWireframe.shared // self.window?.rootViewController = 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 sideMenuController.leftViewBackgroundBlurEffect = UIBlurEffect(style: .regular) window?.backgroundColor = sidemenuVc.view.backgroundColor self.window?.rootViewController = sideMenuController }else { // go to splashscreen let splashWireframe = SplashScreenWireframe() let nav = UINavigationController.init(rootViewController: splashWireframe.getMainView()) self.window?.rootViewController = nav } } private func registerForNotification(application: UIApplication) { // if #available(iOS 10.0, *) { // // For iOS 10 display notification (sent via APNS) // UNUserNotificationCenter.current().delegate = self // let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] // UNUserNotificationCenter.current().requestAuthorization( // options: authOptions, // completionHandler: {_, _ in }) // } else { // // } // let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil) application.registerForRemoteNotifications() application.registerUserNotificationSettings(settings) } func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) { if userInfo[gcmMessageIDKey] != nil { } } func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { if userInfo[gcmMessageIDKey] != nil { // print("Message ID completionHandler: \(messageID)") } if let aps = userInfo["aps"] as? NSDictionary, let alert = aps["alert"] as? NSDictionary, let _ = alert["body"] as? String, let _ = alert["title"] as? String { let codeID = userInfo["code"] as? String self.redirectWithPushNotification(notificationCode: codeID!) } completionHandler(UIBackgroundFetchResult.newData) } func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) { cmRegistrationId = fcmToken notificationSet.value = true print(fcmToken) } func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) { print(remoteMessage.appData) } public func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) { } @available(iOS 10.0, *) func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { var userInfo = notification.request.content.userInfo if userInfo[gcmMessageIDKey] != nil { // print("Message ID: def \(messageID)") } /** redirection of page after foreground push notification */ 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 { // print("Title: \(title) \nBody:\(body)") let codeID = userInfo["code"] as? String let banner = Banner(title: title, subtitle: body, image: #imageLiteral(resourceName: "ic_gme"), backgroundColor: UIColor(red:0.93, green:0.11, blue:0.14, alpha:1.0)) banner.didTapBlock = { // print("Banner was tapped on \(Date())!") self.redirectWithPushNotification(notificationCode: codeID!) } banner.show(duration: 5.0) } if userInfo["code"] != nil { // print("codeAP delegate: \(codeID)") } // Change this to your preferred presentation option completionHandler([]) } func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { // print("Unable to register for remote notifications: \(error.localizedDescription)") } func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { } /** method for redirection of page when push notification tap */ func redirectWithPushNotification(notificationCode: String){ let nav = UINavigationController() switch notificationCode { case "500": InviteViewController.notificationCode = "p500" let storyboard = UIStoryboard(name: "Invite", bundle: nil) let viewController = storyboard.instantiateViewController(withIdentifier :"InviteViewController") as! InviteViewController let navController = UINavigationController.init(rootViewController: viewController) if let window = self.window, let rootViewController = window.rootViewController { var currentController = rootViewController while let presentedController = currentController.presentedViewController { currentController = presentedController } currentController.present(navController, animated: true, completion: nil) } case "200": TranscationStatementViewController.notificationCode = "p200" let storyboard = UIStoryboard.init(name: "TransactionStatement", bundle: Bundle.main) if let transcationStatementViewController = storyboard.instantiateViewController(withIdentifier: "TranscationStatementViewController") as? TranscationStatementViewController { nav.viewControllers = [transcationStatementViewController] window?.rootViewController = nav } case "201": MoneyRequestViewController.notificationCode = "p201" let storyboard = UIStoryboard.init(name: "WalletTransfer", bundle: Bundle.main) if let moneyRequestViewController = storyboard.instantiateViewController(withIdentifier: "MoneyRequestViewController") as? MoneyRequestViewController { nav.viewControllers = [moneyRequestViewController] window?.rootViewController = nav } case "202": // redirectViewController(storyBoardName: "WalletTransfer", identifier: "WalletTransactionListViewController") WalletTransactionListViewController.notificationCode = "p202" let storyboard = UIStoryboard.init(name: "WalletTransfer", bundle: Bundle.main) if let walletTransactionListViewController = storyboard.instantiateViewController(withIdentifier: "WalletTransactionListViewController") as? WalletTransactionListViewController { walletTransactionListViewController.walletStatus = "walletBorrow" nav.viewControllers = [walletTransactionListViewController] window?.rootViewController = nav } case "203": TranscationStatementViewController.notificationCode = "p203" let storyboard = UIStoryboard.init(name: "TransactionStatement", bundle: Bundle.main) if let transcationStatementViewController = storyboard.instantiateViewController(withIdentifier: "TranscationStatementViewController") as? TranscationStatementViewController { nav.viewControllers = [transcationStatementViewController] window?.rootViewController = nav } case "204": TranscationStatementViewController.notificationCode = "p204" let storyboard = UIStoryboard.init(name: "TransactionStatement", bundle: Bundle.main) if let transcationStatementViewController = storyboard.instantiateViewController(withIdentifier: "TranscationStatementViewController") as? TranscationStatementViewController { nav.viewControllers = [transcationStatementViewController] window?.rootViewController = nav } case "205": // redirectViewController(storyBoardName: "WalletTransfer", identifier: "walletViewController") WalletTransactionListViewController.notificationCode = "p205" let storyboard = UIStoryboard.init(name: "WalletTransfer", bundle: Bundle.main) if let walletTransactionListViewController = storyboard.instantiateViewController(withIdentifier: "WalletTransactionListViewController") as? WalletTransactionListViewController { walletTransactionListViewController.walletStatus = "walletTransfer" nav.viewControllers = [walletTransactionListViewController] window?.rootViewController = nav } case "206": TranscationStatementViewController.notificationCode = "p200" let storyboard = UIStoryboard.init(name: "TransactionStatement", bundle: Bundle.main) if let transcationStatementViewController = storyboard.instantiateViewController(withIdentifier: "TranscationStatementViewController") as? TranscationStatementViewController { nav.viewControllers = [transcationStatementViewController] window?.rootViewController = nav } case "207": TranscationStatementViewController.notificationCode = "p200" let storyboard = UIStoryboard.init(name: "TransactionStatement", bundle: Bundle.main) if let transcationStatementViewController = storyboard.instantiateViewController(withIdentifier: "TranscationStatementViewController") as? TranscationStatementViewController { nav.viewControllers = [transcationStatementViewController] window?.rootViewController = nav } case "208": TranscationStatementViewController.notificationCode = "p208" let storyboard = UIStoryboard.init(name: "TransactionStatement", bundle: Bundle.main) if let transcationStatementViewController = storyboard.instantiateViewController(withIdentifier: "TranscationStatementViewController") as? TranscationStatementViewController { nav.viewControllers = [transcationStatementViewController] window?.rootViewController = nav } case "700": // redirectViewController(storyBoardName: "Reward", identifier: "RewardViewController") RewardViewController.notificationCode = "p700" let storyboard = UIStoryboard.init(name: "Reward", bundle: Bundle.main) if let rewardViewController = storyboard.instantiateViewController(withIdentifier: "RewardViewController") as? RewardViewController { nav.viewControllers = [rewardViewController] window?.rootViewController = nav } case "750": return //redirectViewController(storyBoardName: "Home", identifier: "CommentsViewController") default: return } } }