Oskar Gusgård
Oskar Gusgård

Reputation: 477

Can the watch app receive background info even if the app is in the background?

I cannot figure out how to make updateApplicationContext data arrive on the watch before the watch app is foregrounded. It seems to work only when the watch app is foregrounded.

How can the watch receive files while in the background?

This is what I've been trying to accomplish:

iOS code:

func sendDataToWatch() {
        if WCSession.isSupported() {
            do {
                try WCSession.default.updateApplicationContext(["key":value])
            } catch {
                print("ERROR: \(error)")
            }
        }
    }

Watch code:

func session(_ session: WCSession, didReceiveApplicationContext
        applicationContext:[String : Any]) {

      //handle data when it arrives

    }

I noticed that the WatchConnectivity was provided with a handler function. Is this something I should set up to be able to handle background connectivity while the Watch App is backgrounded or not even launched?

func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
    // Sent when the system needs to launch the application in the background to process tasks. Tasks arrive in a set, so loop through and process each one.
    for task in backgroundTasks {
        // Use a switch statement to check the task type
        switch task {
        case let backgroundTask as WKApplicationRefreshBackgroundTask:
            // Be sure to complete the background task once you’re done.
            backgroundTask.setTaskCompletedWithSnapshot(false)
        default:
            // make sure to complete unhandled task types
            task.setTaskCompletedWithSnapshot(false)
        }
    }
}

Upvotes: 7

Views: 1723

Answers (1)

iOS Developer
iOS Developer

Reputation: 558

According to apple you can send data from iPhone to Apple Watch using SendMessage while session is reachable.

https://developer.apple.com/documentation/watchconnectivity/wcsession/1615687-sendmessage

Calling this method from your WatchKit extension while it is active and running wakes up the corresponding iOS app in the background and makes it reachable.

You can use below methods to send data from the iPhone to Apple Watch

Swift 2.2

let msg = ["IPrequest":"IsLogin"]

WCSession.defaultSession().sendMessage(msg, replyHandler: { (replyDict) in
    print(replyDict)
    }, errorHandler: { (error) in
        print(error)
})

Received dictionary using below method

Swift 2.2

func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void)
{

    dispatch_async(dispatch_get_main_queue()) { () -> Void in

        print("Response:\(message)")

    }
}

I have implemented above solution in one of the my project.

Hope it will help you!

Upvotes: 1

Related Questions