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)
 | |
|         }
 | |
|     }
 | |
| }
 |