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