5

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

4

2 回答 2

3

在 WatchOS 2 之前,您可以通过共享组容器或 iCloud 在 iOS 配套应用程序和 watchOS 应用程序之间共享数据来交换数据。

从 WatchOS 2 开始,由于 WatchKit 扩展程序现在运行在 Apple Watch 本身上,因此扩展程序必须与 iOS 应用程序无线交换数据。您将不得不使用WCSession类,它是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.
            }
        }
   }
}
于 2018-04-28T12:00:24.757 回答
0

您可以使用 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
    }
}
于 2018-04-27T13:34:01.647 回答