Files
2024-02-21 23:35:47 +13:00

98 lines
2.5 KiB
Swift

import SwiftUI
import Appwrite
import NIO
import Firebase
import FirebaseMessaging
let host = "https://cloud.appwrite.io/v1"
let projectId = "[YOUR_PROJECT_ID]"
let client = Client()
.setEndpoint(host)
.setProject(projectId)
let account = Account(client)
let storage = Storage(client)
let realtime = Realtime(client)
class AppDelegate: NSObject, UIApplicationDelegate, UNUserNotificationCenterDelegate, MessagingDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil
) -> Bool {
FirebaseApp.configure()
Messaging.messaging().delegate = self
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: { granted, error in
DispatchQueue.main.async {
if granted {
application.registerForRemoteNotifications()
}
}
}
)
return true
}
func messaging(
_ messaging: FirebaseMessaging.Messaging,
didReceiveRegistrationToken fcmToken: String?
) {
guard let fcmToken = fcmToken else {
return
}
UserDefaults.standard.set(fcmToken , forKey: "fcmToken")
let targetId = UserDefaults.standard.string(forKey: "targetId")
Task {
do {
_ = try await account.get()
} catch {
return
}
if targetId == nil {
let target = try? await account.createPushTarget(
targetId: ID.unique(),
identifier: fcmToken
)
UserDefaults.standard.set(target?.id , forKey: "targetId")
} else {
_ = try? await account.updatePushTarget(
targetId: targetId!,
identifier: fcmToken
)
}
}
}
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
) {
Messaging.messaging().apnsToken = deviceToken
}
}
@main
struct ExampleApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
var body: some Scene {
WindowGroup {
ExampleView(viewModel: ExampleView.ViewModel())
}
}
}