85 lines
2.8 KiB
Swift
85 lines
2.8 KiB
Swift
import Flutter
|
|
import UIKit
|
|
import WatchConnectivity
|
|
|
|
@main
|
|
@objc class AppDelegate: FlutterAppDelegate {
|
|
let notifyDelegate = NotifyDelegate()
|
|
private var watchConnectivityService: WatchConnectivityService?
|
|
|
|
override func application(
|
|
_ application: UIApplication,
|
|
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
|
) -> Bool {
|
|
UNUserNotificationCenter.current().delegate = notifyDelegate
|
|
|
|
let replyableMessageCategory = UNNotificationCategory(
|
|
identifier: "CHAT_MESSAGE",
|
|
actions: [
|
|
UNTextInputNotificationAction(
|
|
identifier: "reply_action",
|
|
title: "Reply",
|
|
options: []
|
|
),
|
|
],
|
|
intentIdentifiers: [],
|
|
options: []
|
|
)
|
|
|
|
UNUserNotificationCenter.current().setNotificationCategories([replyableMessageCategory])
|
|
|
|
GeneratedPluginRegistrant.register(with: self)
|
|
|
|
if WCSession.isSupported() {
|
|
watchConnectivityService = WatchConnectivityService()
|
|
}
|
|
|
|
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
|
}
|
|
}
|
|
|
|
class WatchConnectivityService: NSObject, WCSessionDelegate {
|
|
private let session: WCSession
|
|
|
|
override init() {
|
|
self.session = .default
|
|
super.init()
|
|
print("[iOS] Activating WCSession")
|
|
self.session.delegate = self
|
|
self.session.activate()
|
|
}
|
|
|
|
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
|
|
if let error = error {
|
|
print("[iOS] WCSession activation failed with error: \(error.localizedDescription)")
|
|
return
|
|
}
|
|
print("[iOS] WCSession activated with state: \(activationState.rawValue)")
|
|
}
|
|
|
|
func sessionDidBecomeInactive(_ session: WCSession) {}
|
|
|
|
func sessionDidDeactivate(_ session: WCSession) {
|
|
session.activate()
|
|
}
|
|
|
|
func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) {
|
|
print("[iOS] Received message: \(message)")
|
|
if let request = message["request"] as? String, request == "data" {
|
|
let token = UserDefaults.standard.getFlutterToken()
|
|
let serverUrl = UserDefaults.standard.getServerUrl()
|
|
|
|
print("[iOS] Retrieved token: \(token ?? "nil")")
|
|
print("[iOS] Retrieved serverUrl: \(serverUrl)")
|
|
|
|
var data: [String: Any] = ["serverUrl": serverUrl]
|
|
if let token = token {
|
|
data["token"] = token
|
|
}
|
|
|
|
print("[iOS] Replying with data: \(data)")
|
|
replyHandler(data)
|
|
}
|
|
}
|
|
}
|