Cordova 后台获取插件不适用于 iOS

use*_*971 5 plugins cordova ios7

我想实现这个插件:https ://github.com/christocracy/cordova-plugin-background-fetch 。我使用 CLI 安装了该插件,然后将 BackgroundFetch.js 文件复制到我的 www 目录并在 index.html 中引用它。我将 git url 中给出的示例代码放置在 DeviceReady 函数中。尽管如此,在启动时我还是遇到了错误:

类型错误:“未定义”不是对象(正在评估“Fetcher.configure”)

有人可以告诉我为什么会发生这种情况吗?我已经尝试了两天但没有成功。任何帮助将不胜感激。提前致谢!


EDIT1:抱歉我之前没有提到,我使用命令行创建了一个 cordova 项目并添加了如上所述的插件,然后在 iOS 模拟器和 iPhone 4S 上运行它。两者都给出相同的错误。我将代码包装在 try-catch 块中并发出错误警报,这就是出现的错误。

看到Clawish的建议后,我删除了js文件及其引用,并再次删除并添加了插件。现在我没有收到任何错误,但我在日志中没有看到“CDVBackgroundFetch 配置”。如果我在模拟器上模拟后台提取,则会收到错误: -

CDVBackgroundFetch onFetch
警告:应用程序委托收到对 -application:performFetchWithCompletionHandler: 的调用,但从未调用完成处理程序。

我哪里错了?除了添加示例代码以在 onDeviceReady 中调用 Fetcher.configure 之外,我没有对代码进行任何更改


编辑2:

在看到你的 Clawfish 的第二次编辑后,我删除了服务调用并缩短了函数,如下所示:

onDeviceReady: function() {
app.receivedEvent('deviceready');

var Fetcher = window.plugins.backgroundFetch;

// Your background-fetch handler.
var fetchCallback = function() {
    console.log('BackgroundFetch initiated');
    Fetcher.finish();
}
Fetcher.configure(fetchCallback);
},
Run Code Online (Sandbox Code Playgroud)

尽管如此,我没有看到任何日志消息说“CDVBackgroundFetch 配置”,并且在模拟后台获取时出现与上面相同的警告。看起来 Fetch 部分是在没有首先运行配置的情况下执行的。

Cla*_*ish 1

Edit2:我想您已经添加了文档中的整个示例代码(带有声明var Fetcher和处理程序var fetchCallback,并且在声明两者之后,您运行Fetcher.configure(fetchCallback);。问题可能是您没有在您的中引用 jQueryindex.html并且代码在它停止运行时停止运行看到这一行$.get(...)。如果是这种情况,请下载jQuery,将其放入您的www文件夹中,然后从您的 中引用它index.html。您看到控制台消息了吗console.log('BackgroundFetch initiated');?怎么样/heartbeat.json,您更改了吗?


编辑:您不需要将BackgroundFetch.js复制到您的www目录,也不需要在index.html. 尝试删除您的引用index.html并在安装后保持插件文件不变。如果您更改了有关文件结构的某些内容,则应该稍后再cordova plugin remove更改该插件。add


我不知道您从哪个控制台收到此错误。如果它是一个浏览器控制台,比如 Chrome,那就不足为奇了,因为 Fetcher 只能在 iDevice(或 iOS 模拟器)上运行。Cordova 控制台插件不会打印此类消息。

尝试在 iOS 模拟器中使用该代码。