Как я могу проверить из приложения для часов, что если пользователь вошел в систему или не вошел в приложение телефона - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь добавить расширение для часов в свое существующее приложение. Логин является обязательным для моего заявления. Как я могу проверить из приложения для часов, вошел ли пользователь в систему или нет ... и когда пользователь вошел в систему, я хочу передать эти данные для входа из приложения в приложение watchapplication. Я не знаю, как передать данные для входа, чтобы посмотреть приложение.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

До WatchOS 2 вы могли обмениваться данными между приложением iOS и приложением watchOS, используя контейнер с общей группой или iCloud для обмена данными.

Из WatchOS 2, поскольку расширение WatchKit теперь работает на самом Apple Watch, расширение должно обмениваться данными с приложением iOS по беспроводной сети. Вам нужно будет использовать WCSession класс, который является частью WatchConnectivity framework. Каркас используется для реализации двусторонней связи между приложением 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.
            }
        }
   }
}
0 голосов
/ 27 апреля 2018

Вы можете сделать это с помощью 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
    }
}
...