@@ -0,0 +1,86 @@ // // SessionHandler.swift // AntFootPrint // // Created by DONGHYUN KIM on 2020/11/20. // Copyright © 2020 DONGHYUN KIM. All rights reserved. // import Foundation import WatchConnectivity class SessionHandler : NSObject, WCSessionDelegate { // 1: Singleton static let shared = SessionHandler() // 2: Property to manage session private var session = WCSession.default override init() { super.init() // 3: Start and avtivate session if it's supported if isSuported() { session.delegate = self session.activate() } print("isPaired?: \(session.isPaired), isWatchAppInstalled?: \(session.isWatchAppInstalled)") } func isSuported() -> Bool { return WCSession.isSupported() } // MARK: - WCSessionDelegate // 4: Required protocols // a func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { print("activationDidCompleteWith activationState:\(activationState) error:\(String(describing: error))") } // b func sessionDidBecomeInactive(_ session: WCSession) { print("sessionDidBecomeInactive: \(session)") } // c func sessionDidDeactivate(_ session: WCSession) { print("sessionDidDeactivate: \(session)") // Reactivate session /** * This is to re-activate the session on the phone when the user has switched from one * paired watch to second paired one. Calling it like this assumes that you have no other * threads/part of your code that needs to be given time before the switch occurs. */ self.session.activate() } /// Observer to receive messages from watch and we be able to response it /// /// - Parameters: /// - session: session /// - message: message received /// - replyHandler: response handler func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) { if message["request"] as? String == "version" { replyHandler(["version" : "\(Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "No version")"]) } else { let msg = message["request"] as? String replyHandler(["message" : "App sent same \(msg)"]) } } func sendMessage(msg : String) { self.session.sendMessage(["msg" : msg], replyHandler: nil) { (error) in print("Error sending message: \(error)") } } }