Как я могу получить данные на Apple Watch, когда iPhone заблокирован или приложение iPhone находится в фоновом режиме? - PullRequest
0 голосов
/ 24 сентября 2019

Я создал приложение для iPhone, которое подключается к локальному веб-серверу (MAMP).Он получает файл JSON, который я анализирую, чтобы получить строку: «Hello World».

Приложение на Apple Watch функционирует как удаленный контроллер для iPhone: когда я нажимаю кнопку «Пуск» на Apple Watch, оноотправляет сообщение в приложение iOS, вызывая сеанс метода делегата (didReceiveUserInfo), который вызывает функцию getJSONFile ().Затем, получив строку, я передаю ее на Apple Watch с помощью TransferUserInfo от WatchConnectivity, в конечном итоге отображая текст на ipAddressLabel.

Все работает хорошо, когда оба приложения активны на переднем плане.Но когда iPhone заблокирован или приложение находится в фоновом режиме (например, когда я захожу в Launcher / Home), я не вижу текст на часах, пока не открою приложение на iPhone, тогда на ярлыке сразу же появится Hello Worldкак я хотел.

Я просто хочу знать, есть ли способ заставить его работать, когда приложение для iOS находится в фоновом режиме / неактивно и т. д ...

Я покажу вам некоторый код:

ViewController.swift // iPhone

import UIKit
import WatchConnectivity
import Alamofire
import SwiftyJSON


func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) {
    DispatchQueue.main.async {
        if let text = userInfo["text"] as? String {

            //self.statusLabel.text = text

            print(text)

            self.getJSONFile()

        }
    }
}

func getJSONFile() {

    Alamofire.request(URL, method: .get).responseJSON {
        response in
        if response.result.isSuccess {
            print("Success! Got the JSON file!")

            let fileJSON: JSON = JSON(response.result.value!)

            print(fileJSON)

            let test = fileJSON["string"].string

            self.statusLabel.text = test

            let session = WCSession.default

            // Transfer User Info Method
            if session.activationState == .activated {

                let data = ["text": test]

                session.transferUserInfo(data)

            }


        }
        else {
            print("Error \(response.result.error)")
            self.statusLabel.text = "Connection Issues"
        }
    }
}

InterfaceController.swift // Apple Watch

import WatchKit
import Foundation
import WatchConnectivity

@IBAction func startButtonPressed() {
    print("Start button pressed watch")

    let session = WCSession.default

    // Transfer User Info Method
    if session.activationState == .activated {

        let data = ["text": "Calling getJSONFile on iPhone"]

        session.transferUserInfo(data)

    }

}


func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) {
    if let text = userInfo["text"] as? String {
        self.ipAddressLabel.setText(text)
    }
    print("userInfo received on Apple Watch")
}

Спасибо:)

...