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.
110 lines
4.0 KiB
110 lines
4.0 KiB
//
|
|
// AppDelegate.swift
|
|
// PadelClub
|
|
//
|
|
// Created by Laurent Morvillier on 12/07/2024.
|
|
//
|
|
|
|
import Foundation
|
|
import UIKit
|
|
import LeStorage
|
|
import UserNotifications
|
|
import PadelClubData
|
|
|
|
class AppDelegate : NSObject, UIApplicationDelegate, UNUserNotificationCenterDelegate {
|
|
|
|
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:[UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
|
// Override point for customization after application launch.
|
|
|
|
_ = Guard.main // init guard
|
|
|
|
self._configureLeStorage()
|
|
|
|
UIApplication.shared.registerForRemoteNotifications()
|
|
UNUserNotificationCenter.current().delegate = self
|
|
|
|
return true
|
|
}
|
|
|
|
fileprivate func _configureLeStorage() {
|
|
StoreCenter.main.blackListUserName("apple-test")
|
|
StoreCenter.main.classProject = "PadelClubData"
|
|
// let secureScheme = true
|
|
let domain: String = URLs.activationHost.rawValue
|
|
|
|
#if DEBUG
|
|
if let secure = PListReader.readBool(plist: "local", key: "secure_server"),
|
|
let domain = PListReader.readString(plist: "local", key: "server_domain") {
|
|
StoreCenter.main.configureURLs(secureScheme: secure, domain: domain, webSockets: true, useSynchronization: true)
|
|
} else {
|
|
StoreCenter.main.configureURLs(secureScheme: true, domain: domain, webSockets: true, useSynchronization: true)
|
|
}
|
|
#else
|
|
StoreCenter.main.configureURLs(secureScheme: true, domain: domain, webSockets: false)
|
|
#endif
|
|
|
|
StoreCenter.main.logsFailedAPICalls()
|
|
|
|
var synchronized: Bool = true
|
|
|
|
#if DEBUG
|
|
if let sync = PListReader.readBool(plist: "local", key: "synchronized") {
|
|
synchronized = sync
|
|
}
|
|
#endif
|
|
|
|
StoreCenter.main.forceNoSynchronization = !synchronized
|
|
}
|
|
func applicationWillEnterForeground(_ application: UIApplication) {
|
|
Task {
|
|
try await Guard.main.refreshPurchasedAppleProducts()
|
|
}
|
|
}
|
|
|
|
// MARK: - Remote Notifications
|
|
|
|
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
|
|
|
|
if StoreCenter.main.isAuthenticated {
|
|
Task {
|
|
do {
|
|
let services = try StoreCenter.main.service()
|
|
try await services.postDeviceToken(deviceToken: deviceToken)
|
|
} catch {
|
|
Logger.error(error)
|
|
}
|
|
}
|
|
}
|
|
// Logger.log("token = \(deviceToken)")
|
|
}
|
|
|
|
func application(_ application: UIApplication,
|
|
didFailToRegisterForRemoteNotificationsWithError
|
|
error: Error) {
|
|
Logger.error(error)
|
|
}
|
|
|
|
// MARK: - UNUserNotificationCenterDelegate
|
|
|
|
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
|
|
// Show the notification as a banner even when the app is in the foreground
|
|
completionHandler([.banner, .sound, .badge])
|
|
}
|
|
|
|
// Handle notifications when the user taps on them
|
|
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
|
|
let userInfo = response.notification.request.content.userInfo
|
|
// Handle the notification content here
|
|
print("User Info: \(userInfo)")
|
|
|
|
// Perform your custom actions based on the notification content
|
|
completionHandler()
|
|
}
|
|
|
|
static func askPermissions() {
|
|
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound]) { success, error in
|
|
print("requestAuthorization > success = \(success), error = \(String(describing: error))")
|
|
}
|
|
}
|
|
|
|
}
|
|
|