Cordova Background Fetcher 插件不适用于 iOS

Posted

技术标签:

【中文标题】Cordova Background Fetcher 插件不适用于 iOS【英文标题】:Cordova Background Fetcher plugin not working for iOS 【发布时间】:2014-09-17 13:15:43 【问题描述】:

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

TypeError: 'undefined' 不是对象(正在评估 'Fetcher.configure')

谁能告诉我为什么会这样?我已经尝试了两天,但没有成功。任何帮助将不胜感激。提前致谢!


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

在看到Clawish的建议后,我删除了js文件和对它的引用,并再次删除并添加了插件。现在我没有收到任何错误,但在日志中没有看到“CDVBackgroundFetch 配置”。如果我在模拟器上模拟后台提取,我会收到错误消息:- CDVBackgroundFetch onFetch 警告:应用程序委托收到了对 -application:performFetchWithCompletionHandler: 的调用,但从未调用过完成处理程序。 我哪里错了?除了添加示例代码以在 onDeviceReady 中调用 Fetcher.configure 之外,我没有对代码进行任何更改


EDIT2:

在看到您的 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);
,

不过,我没有看到任何日志消息说“CDVBackgroundFetch 配置”,并且在模拟后台获取时出现与上面相同的警告。似乎 Fetch 部分是在没有运行 configure 的情况下执行的。

【问题讨论】:

【参考方案1】:

Edit2:我猜你已经从文档中添加了整个示例代码(声明 var Fetcher 和处理程序 var fetchCallback 并且在声明两者之后,你运行 Fetcher.configure(fetchCallback);。 问题可能是您的index.html 中没有引用jQuery,并且代码在看到$.get(...) 行时停止运行。如果是这样的话,downloadjQuery,把它放到你的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模拟器中的代码。

【讨论】:

对不起,我没有提到它,我使用命令行创建了一个cordova项目并添加了如上所述的插件,然后在iOS模拟器和iPhone 4S上运行它。两者都给出相同的错误。 我将代码包装在一个 try-catch 块中并警告错误,这就是出现的错误。 感谢您的建议,我删除了js文件和对它的引用,并再次删除并添加了插件。现在我没有收到任何错误,但我没有在日志中看到“CDVBackgroundFetch 配置”。如果我在模拟器上模拟后台提取,我会收到错误消息:- CDVBackgroundFetch onFetch 警告:应用程序委托收到了对 -application:performFetchWithCompletionHandler 的调用:但从未调用过完成处理程序。我哪里错了?除了添加示例代码以在 onDeviceReady 中调用 Fetcher.configure 之外,我没有对代码进行任何更改。 非常感谢 Clawfish 的所有帮助。我修改了上面粘贴的 DeviceReady 代码,错误仍然存​​在。 =/ 您的deviceReady 事件触发了吗? IE。你有document.addEventListener("deviceready",onDeviceReady,false);吗?

以上是关于Cordova Background Fetcher 插件不适用于 iOS的主要内容,如果未能解决你的问题,请参考以下文章

在 phonegap 上使用 cordova-plugin-mauron85-background-geolocation 显示纬度和经度

Ionic 2 cordova-plugin-mauron85-background-geolocation 不更新 UI

使用 cordova-plugin-background-mode 在后台模式下进行位置检测和 HTTP 调用

cordova无法删除ios插件的解决办法

ionic + cordova 插件和后台模式

在后台获取 Ionic/Cordova 应用程序的位置