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