[ https://issues.apache.org/jira/browse/CB-12815?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Shazron Abdullah resolved CB-12815. ----------------------------------- Resolution: Fixed > WKWebView plugin will not execute Javascript while app is backgrounded > ---------------------------------------------------------------------- > > Key: CB-12815 > URL: https://issues.apache.org/jira/browse/CB-12815 > Project: Apache Cordova > Issue Type: Bug > Components: cordova-plugin-wkwebview-engine > Environment: iOS > Reporter: Rich Storm > Assignee: Shazron Abdullah > Priority: Major > Labels: Background, Javascript, WKWebView, wkwebview-baked-in, > wkwebview-known-issues > > iOS 10 now has power saving requirements and will not allow background tasks > to function to save battery. For example, a VoIP app can no longer use a > polling strategy to stay awake. The new recommended way, according to Apple > (https://developer.apple.com/library/content/documentation/Performance/Conceptual/EnergyGuide-iOS/OptimizeVoIP.html), > is to use VoIP silent push notifications to wake up the app and do the work. > I have verified that all VoIP silent push notifications arrive correctly when > using the UIWebView with a vanilla Cordova install. However, when adding the > cordova-plugin-wkwebview-engine, the Javascript callbacks do not fire > correctly when receiving the VoIP silent push notification while the app is > in the background. What happens is the first notification is queued, then the > next notification forces the first notification result to the callback. > Effectively, making each push notification 1 behind. When the app is put back > into the foreground, the last push notification callback is fired. > When the app is in the foreground, all works fine. > The issue is with the call to "setTimeout" in the iOSExec.nativeCallback > function. It makes sense that if Apple is trying to minimize background > execution to save battery, then they would limit the use of the setTimeout > feature. > This issue is fixed by changing the iOSExec.nativeCallback function to call > the cordova.callbackFromNative function directly without a setTimeout > wrapper. I understand that removing setTimeout is not an elegant solution and > may cause deadlocks. Maybe a new argument isBackground or something to that > effect. > src/www/ios/ios-wkwebview-exec.js > {code:javascript} > iOSExec.nativeCallback = function(callbackId, status, message, > keepCallback, debug) { > var success = status === 0 || status === 1; > var args = convertMessageToArgsNativeToJs(message); > > // setTimeout(function(){ > cordova.callbackFromNative(callbackId, success, status, args, > keepCallback); > // }, 0); > }; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org For additional commands, e-mail: issues-h...@cordova.apache.org