我如何从手表应用程序中检查用户是否已登录 phone 应用程序

How can i check from watch app that if user logged-in or not into the phone application

我正在尝试将手表扩展添加到我现有的应用程序中。我的应用程序必须登录。如果用户登录或未登录,我如何从手表应用程序中检查...并且当用户登录时,我想将该登录数据从应用程序传递到手表应用程序。我不知道如何将登录数据传递给观看应用程序。

您可以使用 Watch Connectivity 执行此操作。特别是用 transferUserInfo() 发送一个布尔值。这将允许您在用户登录或注销时从 iPhone 应用程序发送数据,并将在后台传送到手表扩展程序。

这是一个例子:

func updateUserLoggedIn(_ loggedInValue : Bool) {

    if WCSession.isSupported() {
        WCSession.default.transferUserInfo(["User Logged In" : loggedInValue])
    }
}

那么您只需在您的手表扩展程序中处理传输即可:

func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) {

    if let userInfoFromPhone = userInfo["User Logged In"] {
        // Handle Result Accordingly
    }
}

在 WatchOS 2 之前,您可以在 iOS 配套应用和 watchOS 应用之间共享数据,方法是使用共享组容器或 iCloud 交换数据。

从 WatchOS 2 开始,由于 WatchKit 扩展现在在 Apple Watch 本身上运行,因此扩展必须与 iOS 应用程序无线交换数据。您将不得不使用 WCSession class,它是 WatchConnectivity 框架的一部分。该框架用于实现 iOS 应用与其配对的 watchOS 应用之间的双向通信。

在 iPhone 配套应用中。 实施以下内容:

import WatchConnectivity

class LoginViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        if WCSession.isSupported() {
            WCSession.default().activate()
        } 
    }

    @IBAction func loginAction(_ sender: Any) {

    // In this case ApiHandler is just a class which performs REST call to authenticate login credentials.
     ApiHandler.login(username: txtUsername.text!, password: txtPassword.text!, { (loginSuccess) in
        if loginSuccess {

            let dict = ["statusLogin": "success"] 
            WCSession.default().sendMessage(dict, replyHandler: { (replyMessage) in
                print(replyMessage)
            }) { (error) in
                print(error.localizedDescription)
            }
        }

     }) 
    }

}

在 watchOS 应用程序中。

import WatchConnectivity

class BaseInterfaceController: WKInterfaceController {
    override func willActivate() {
        super.willActivate()

       if WCSession.isSupported() {
           WCSession.default().delegate = self
           WCSession.default().activate()
       }
    }

}

extension BaseInterfaceController: WCSessionDelegate {
   func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {

   }

   func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Swift.Void) {
        if let loginStatus = message["statusLogin"] as? String {
            if loginStatus == "success" {
              // login has been success in iOS app
              // perform further tasks, like saving in Userdefaults etc.
            }
        }
   }
}