mirror of
https://github.com/appwrite/sdk-for-apple.git
synced 2026-04-07 19:17:50 +00:00
98 lines
2.5 KiB
Swift
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())
|
|
}
|
|
}
|
|
}
|