Ich entwickle eine WatchApp, die mit der iOS App kommunizieren muss, und ich verwende die Watch Connectivity fwk, um das zu tun.WKExtension-Status und sendMessage für Live-Messaging
Jedes Mal, wenn der Benutzer meine WatchApp anzeigt, muss ich von der iOS App einen neuen Datensatz abrufen, der auf der Uhr angezeigt werden muss.
Um diese Daten zu erhalten, verwende ich sendMessage (_: replyHandler: errorHandler :) aber manchmal scheint es, dass diese Kommunikation nicht funktioniert, weil meine WatchApp nicht aktualisiert wird. Ich habe kein Problem, wenn die WatchApp von Xcode gestartet wurde, Probleme erscheinen nur, wenn ich es im wirklichen Leben benutze.
ich lösen die Synchronisation zwischen dem WatchApp und dem iOS App jedes Mal meine WatchApp Rückruf eingeschaltet ist:
- WKInterfaceController.willActivate() (Ich habe nur einen Controller)
- WCSessionDelegate.session (WCSession, didReceiveApplicationContext:
[String: Alles]) wenn die activationState == .activated - WCSessionDelegat e.sessionReachabilityDidChange (WCSession) wenn die
Sitzung
Im Video „Introducing Uhr Connectivity“ für die 2015 WWDC erreichbar ist, sagt der Sprecher der WatchKit Erweiterung mussVordergrund ausgeführt werden, wenn eine interaktive Nachricht zu senden zur iOS App.
Bedeutet es, ich brauche die WKExtention.shared() überprüfen applicationState == .active vor nachrichts (_ nennen. ReplyHandler: errorhandler :), zusätzlich von WCSession.activationState ==. aktiviert?
Als mein WatchApp im Dock ist und der Benutzer zeigt das Dock, mein WatchApp hat eine WKExtension.shared(). ApplicationState == .inactive und WKExtension.shared(). IsApplicationRunningInDock == true, Can Ich benutze sendMessage (_: replyHandler: errorHandler :), um meine App in diesem Zustand zu aktualisieren?
Ich frage mich nur, welche Bedingungen ich vorher überprüfen muss, um sendMessage zu verwenden (_: replyHandler: errorHandler :).
Danke,
Danke für die Antwort!Basierend auf meiner letzten Erfahrung, denke ich nicht, dass es ausreichend ist, activationState und isReachable zu testen, da es passieren kann, dass die Sitzung aktiviert und erreichbar ist, aber die WatchApp läuft im Hintergrund (WKExtension applicationState! = Active). sendMessage (replyHandler: error :) ist für eine interaktive Nachricht und setzt voraus, dass WatchApp im Vordergrund läuft (mein Verständnis aus WWDC-Video). Ich habe die Änderung vorgenommen, um zu überprüfen, dass die WatchApp Vordergrund ist, um sendMessage() und es scheint gut funktioniert seit mehr als 24 Stunden. Warten wir es ab... – sebastien