// // AppDelegate.swift // AmazonChimeSDKMessagingDemo // // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: MIT-0 // import UIKit import Amplify import AmplifyPlugins import UserNotifications @main class AppDelegate: UIResponder, UIApplicationDelegate { var deviceToken: String? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { do { try Amplify.add(plugin: AWSCognitoAuthPlugin()) try Amplify.add(plugin: AWSS3StoragePlugin()) try Amplify.configure() } catch { print("An error occurred setting up Amplify: \(error)") } registerForPushNotifications() return true } // handler - registerForRemoteNotifications() succeed func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) } self.deviceToken = tokenParts.joined() } func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { print("AppDelegate Failed to registerForRemoteNotifications: \(error)") } // MARK: UISceneSession Lifecycle func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { // Called when a new scene session is being created. // Use this method to select a configuration to create the new scene with. return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } // Request for the permission to receive push notifications within this app func registerForPushNotifications() { UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { [weak self] granted, _ in guard granted else { return } self?.getNotificationSettings() } } // If push notifications are authorized, call registerForRemoteNotifications to register this device func getNotificationSettings() { UNUserNotificationCenter.current().getNotificationSettings { settings in guard settings.authorizationStatus == .authorized else { return } DispatchQueue.main.async { UIApplication.shared.registerForRemoteNotifications() } } } }