我如何从手表应用程序中检查用户是否已登录 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.
}
}
}
}
我正在尝试将手表扩展添加到我现有的应用程序中。我的应用程序必须登录。如果用户登录或未登录,我如何从手表应用程序中检查...并且当用户登录时,我想将该登录数据从应用程序传递到手表应用程序。我不知道如何将登录数据传递给观看应用程序。
您可以使用 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.
}
}
}
}