如何从手表应用程序检查用户是否已登录电话应用程序

时间:2018-04-27 11:25:03

标签: ios swift watchkit watchconnectivity watchapp

我正在尝试将监视扩展添加到现有应用程序中。我的申请必须登录。我如何从观看应用程序检查用户是否登录...并且当用户获得插入时,我想将该登录数据从应用程序传递到watchapplication。我不知道如何传递登录数据来观看应用程序。

2 个答案:

答案 0 :(得分:2)

在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 app。

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

答案 1 :(得分: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
    }
}