WCSessions transferUserInfo funktioniert nicht mehr zuverlässig in watchOS 2.2 mit iOS 9.3

9

Ich habe eine iOS 9.2 und watchOS 2.1 App, die sendMessage und transferUserInfo verwendet, um Daten vom iPhone zur Apple Watch zu senden. Wenn sendMessage fehlschlägt, verwende ich transferUserInfo , um die Daten für die spätere Zustellung in die Warteschlange zu stellen:

%Vor%

Ohne Code zu ändern und die App auf iOS 9.3 mit watchOS 2.2 auf einem echten Gerät auszuführen (Simulator hat nicht das gleiche Problem), liefert sendMessage Daten an die Apple Watch, solange die Uhr in Reichweite ist und die Bildschirm ist eingeschaltet. Dies ist wie erwartet und wie es vorher funktioniert hat. Wenn der Bildschirm jedoch ausgeschaltet ist und sendMessage fehlschlägt, liefert transferUserInfo keine Daten mehr an die Apple Watch, wenn der Bildschirm wieder eingeschaltet wird.

Um herauszufinden, wo dieser Fehler aufgetreten ist, habe ich die folgende WCSessionDelegate -Methode hinzugefügt, um zu sehen, ob die iOS-App die Daten nicht senden konnte:

%Vor%

Diese Methode wird aufgerufen, nachdem transferUserInfo aufgerufen wurde, aber es wird kein Fehler zurückgegeben und die iOS-App scheint anzuzeigen, dass die Übertragung erfolgreich durchgeführt wurde.

Zuerst dachte ich, dass vielleicht die Zeit für die Übertragung der Daten verlängert wurde, aber nachdem das Gerät für einen Tag allein gelassen wurde, waren die Daten noch nicht übertragen. Ich bin jetzt etwas verdächtig, dass es etwas mit der neuen Multi-Watch-API zu tun hat, und vielleicht muss die iOS-App eine bestimmte Uhr kennen, an die sie gesendet werden kann, obwohl ich nur eine einzige gepaarte Uhr hatte. Hat jemand irgendwelche Ideen, was sich geändert haben könnte und wie man transferUserInfo richtig benutzt?

    
lehn0058 29.03.2016, 13:58
quelle

2 Antworten

2

Ich denke, ich arbeite jetzt daran. Zuerst musste ich die neuen WCSessionDelegate-Methoden zu meiner iOS-App hinzufügen:

%Vor%

Und ähnlich meiner watchOS App:

%Vor%

Aber transferUserInfo funktionierte immer noch nicht für mich, insbesondere wenn der Bildschirm der Apple Watch ausgeschaltet war. Im Folgenden sende ich Informationen zwischen einem iPhone und einer Apple Watch in iOS 9.2 / watchOS 2.1:

%Vor%

Ich hatte angenommen, dass das Senden einer Nachricht vom iPhone an die Apple Watch, wenn der Bildschirm der Uhr ausgeschaltet war, dazu geführt hat, dass transferUserInfo fehlgeschlagen ist, weil sie sich im Fehlerhandler von sendMessage befand. sendMessage funktionierte auch wie erwartet, wenn der Bildschirm aktiv war. Es sieht jedoch so aus, als würde der Fehlerbeantwortungshandler von sendMessage nicht immer aufgerufen, wenn der Bildschirm Ihrer Uhr ausgeschaltet ist, obwohl die Anfrage fehlschlägt. Dies ist ein anderes Verhalten als bei den vorherigen Betriebssystemversionen. Dies scheint auch einen Kaskadeneffekt verursacht zu haben, bei dem nachfolgende Nachrichten ebenfalls fehlgeschlagen sind, obwohl die Bedingungen angemessen waren. Das hat mich glauben gemacht, dass transferUserInfo schuld ist.

Ich habe festgestellt, dass ich, um meine Nachrichten zuverlässig durchlaufen zu können, sowohl nach erreichbaren als auch nach activationState suchen muss. Da ich auch weiterhin frühere iOS- und watchOS-Versionen unterstützen wollte, wurde meine tryWatchSendMessage-Methode wie folgt:

%Vor%

Diese Änderungen scheinen die Probleme, die ich gesehen habe, gelöst zu haben. Ich bin daran interessiert zu sehen, ob diese helfen, die Probleme anderer zu lösen, oder wenn es noch immer Probleme gibt, die zu transferUserInfo nicht funktionieren.

    
lehn0058 30.03.2016, 20:08
quelle
0

Ich hatte seit dem 2.2-Update letzte Woche sehr ähnliche Probleme mit der Kommunikation zur Arbeit - aber ich konnte den App-Kontext oder die Dateien nicht übertragen.

Wie alle anderen auch, funktionierte es im Simulator, aber nicht auf dem Gerät.

Ich habe heute festgestellt, dass ich versucht habe, Daten von einem Hintergrund-Thread zu senden - ich habe alle meine Anrufe in ein dispatch_async(dispatch_get_main_queue()) eingepackt und plötzlich funktioniert jetzt alles.

    
zerogeek 04.04.2016 20:16
quelle