You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

212 lines
5.9 KiB

//
// 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 Localize_Swift
import ChannelIO
import SwiftyBootpay
#if DEBUG
var server: Server = .live
#else
let server: Server = .live
#endif
var overlayView: UIView?
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
UIApplication.shared.applicationIconBadgeNumber = 0
#if DEBUG
NetworkActivityLogger.shared.startLogging()
NetworkActivityLogger.shared.level = .debug
#endif
IQKeyboardManager.shared.enable = true
IQKeyboardManager.shared.shouldResignOnTouchOutside = true
IQKeyboardManager.shared.toolbarTintColor = .black
FirebaseApp.configure()
Fabric.with([Crashlytics.self])
Fabric.sharedSDK().debug = true
Messaging.messaging().delegate = self
let center = UNUserNotificationCenter.current()
center.delegate = self
center.requestAuthorization(options: [.alert, .sound, .badge]) { (_, _) in}
application.registerForRemoteNotifications()
// Initialize ChannelIO
ChannelIO.initialize()
self.window?.rootViewController = LauncherScreenWireframe().getMainView()
GMEDB
.shared
.app
.remove([.isOpenedTokenRenwalAlert, .isOpenedPopupNotification])
StoreReviewHelper.shared.incrementAppOpenedCount()
Bootpay.sharedInstance.appLaunch(application_id: "59a4d328396fa607b9e75de6")
return true
}
func application(
_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any]
) { }
func application(
_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void
) {
ChannelIO.handlePushNotification(userInfo) {
completionHandler(.noData)
}
}
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
ChannelIO.initPushToken(deviceToken: deviceToken)
}
func applicationDidEnterBackground(_ application: UIApplication) {
let taskID = application.beginBackgroundTask(expirationHandler: nil)
let language = Localize.currentLanguage()
GMEDB.shared.app.set(language, .currentLanguage)
let viewcontroller = UIViewController()
viewcontroller.view.backgroundColor = .themeRed
viewcontroller.view.frame = UIScreen.main.bounds
overlayView = viewcontroller.view
guard let view = overlayView else {return}
let topView = UIApplication.shared.keyWindow?.subviews.last
topView?.addSubview(view)
topView?.bringSubviewToFront(view)
if taskID != UIBackgroundTaskIdentifier.invalid {
UIApplication.shared.endBackgroundTask(taskID)
}
}
func applicationWillEnterForeground(_ application: UIApplication) {
if let language = GMEDB.shared.app.string(.currentLanguage) {
Localize.setCurrentLanguage(language)
}
overlayView?.removeFromSuperview()
}
// MARK: BootPay
func applicationWillResignActive(_ application: UIApplication) {
Bootpay.sharedInstance.sessionActive(active: false)
}
func applicationDidBecomeActive(_ application: UIApplication) {
Bootpay.sharedInstance.sessionActive(active: true)
}
func application(
_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]
) -> Bool {
return true
}
}
// 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")")
if ChannelIO.isChannelPushNotification(userInfo) {
ChannelIO.handlePushNotification(userInfo)
}
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)")
}
}