【问题标题】:How to fix waitForSyncReply time-out with Meteor/Cordova iOS app?如何使用 Meteor/Cordova iOS 应用程序修复 waitForSyncReply 超时?
【发布时间】:2017-05-01 01:06:38
【问题描述】:

我们有一个 Meteor/Cordova 应用程序。开发工作正常,除非部署到实际的 iPhone 设备。应用程序通常会在执行几次操作后冻结,从而导致 XCode 中出现以下日志:

2016-12-15 13:12:43.546614 museumexplorer[738:169260] #WK: Connection::waitForSyncReply: Timed-out while waiting for reply, id = 35
2016-12-15 13:12:44.554481 museumexplorer[738:169260] #WK: Connection::waitForSyncReply: Timed-out while waiting for reply, id = 36
2016-12-15 13:12:45.559667 museumexplorer[738:169260] #WK: Connection::waitForSyncReply: Timed-out while waiting for reply, id = 37
2016-12-15 13:13:06.239664 museumexplorer[738:169260] #WK: Connection::waitForSyncReply: Timed-out while waiting for reply, id = 38
2016-12-15 13:13:07.248334 museumexplorer[738:169260] #WK: Connection::waitForSyncReply: Timed-out while waiting for reply, id = 39
2016-12-15 13:13:08.260760 museumexplorer[738:169260] #WK: Connection::waitForSyncReply: Timed-out while waiting for reply, id = 40

我发现它与信标功能有关。如果我注释掉以下代码,则不会发生冻结。

cordova.plugins.locationManager.startRangingBeaconsInRegion(beaconRegion)
    .fail(console.error)
    .done();

我会继续调查。但如果有人有什么好主意,我很想听听!

问候, 克里斯

【问题讨论】:

  • 当我谷歌“Connection::waitForSyncReply”时,它似乎与 WebKit 相关
  • 这里的信息很少。您正在执行什么操作?
  • 只是浏览应用程序。点击菜单项。它在随机的时刻冻结,有时从一开始就冻结。
  • 我收到了确切的错误信息。你在哪里找到并注释掉上面的代码? “cordova.plugins.locationManager...”
  • 另外,我没有使用 Beacons 或 locationManager。我正在使用 Meteor/Cordova 构建一个 iOS 项目。有什么建议吗?

标签: ios cordova meteor bluetooth beacon


【解决方案1】:

根据WebKit Bugzilla,这可能是 WebKit 中的一个隐藏错误

【讨论】:

    【解决方案2】:

    显然,98 个信标的范围实在是太多了,至少在 Cordova 应用程序中 JavaScript 回调的开销是这样的。问题是每个信标都调用了 startRangingBeaconsInRegion。我们将其更改为为每个 UUID 调用它(其中只有 2 个)。整个应用现在感觉更加流畅和响应迅速!

    所以我们替换这个:

    var beaconRegion = new cordova.plugins.locationManager.BeaconRegion(beacon._id,
        beacon.uuid,
        beacon.major,
        beacon.minor);
    
    cordova.plugins.locationManager.startRangingBeaconsInRegion(beaconRegion)
        .fail(console.error)
        .done();
    

    有了这个:

    var beaconRegion = new cordova.plugins.locationManager.BeaconRegion('museumexplorerbeacon_' + uuid,
        uuid);
    
    cordova.plugins.locationManager.startRangingBeaconsInRegion(beaconRegion)
        .fail(console.error)
        .done();
    

    【讨论】:

    • 这可能是在 WebView 中运行 JavaScript(如 Cordova 所做的那样)不够快的情况。如果您在 didRangeBeacons 回调中尽可能快地创建逻辑,您可能能够使其工作。值得一提的是,在 iOS 上使用本机代码,我已经成功地在 iPhone 4S 上同时测距数百个信标,测距回调中的代码最少。
    • @davidgyoung 即使我们有一个空的测距回调,冻结仍然发生。
    • 我在使用这个插件时遇到了同样的错误,但我使用的是区域监控功能。我在这里打开了一个问题:github.com/petermetz/cordova-plugin-ibeacon/issues/287
    猜你喜欢
    • 1970-01-01
    • 2016-05-01
    • 2015-10-24
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多