Как я могу проверить из приложения часов, что если пользователь вошел в систему или нет в приложении телефона
Я пытаюсь добавить часы расширения для моего существующего приложения. Логин является обязательным для моего приложения. Как я могу проверить из приложения часов, вошел ли пользователь в систему или нет... и когда пользователь вошел в систему, я хочу передать эти данные для входа из приложения в приложение watchapplication. Я не знаю, как передать данные для входа, чтобы посмотреть приложение.
3 ответа
До WatchOS 2 вы могли обмениваться данными между приложением iOS и приложением watchOS, используя контейнер с общей группой или iCloud для обмена данными.
Начиная с 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.
}
}
}
}
Вы можете сделать это с помощью 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
}
}
Для этого вы можете использовать общие NSUserDefaults.
NSUserDefaults * sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName: @ "some.unique.name"];
Установите значение в приложении и получите его в расширении.