Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor Cordova应用程序:如何在iOS或Android上运行不同的代码_Cordova_Meteor - Fatal编程技术网

Meteor Cordova应用程序:如何在iOS或Android上运行不同的代码

Meteor Cordova应用程序:如何在iOS或Android上运行不同的代码,cordova,meteor,Cordova,Meteor,我们需要在iOS或Android上运行不同的代码 一种方法是在包文件的开始(在所有代码运行之前)运行包中的不同代码 Meteor.isCordova允许确定是在Cordova上还是在浏览器上 如何在Cordova内部确定是在iOS还是Android上 以下是一些不起作用的代码,因为在此阶段尚未定义Platform.isIOS(): if (Meteor.isCordova && Platform.isIOS()) { Meteor.startup(function ()

我们需要在iOS或Android上运行不同的代码

一种方法是在包文件的开始(在所有代码运行之前)运行包中的不同代码

Meteor.isCordova允许确定是在Cordova上还是在浏览器上

如何在Cordova内部确定是在iOS还是Android上

以下是一些不起作用的代码,因为在此阶段尚未定义Platform.isIOS():

if (Meteor.isCordova && Platform.isIOS()) {
    Meteor.startup(function () {
        console.log('Using plugin for iOS');
    });
} else {
        console.log('Using plugin for Android');
}
这与这里提出的问题不同: 因为关键是要在Meteor构建过程中更早地检测到这一点(也不要使用PhoneGap本身)。这里提供的答案在当前环境下不起作用

Template.registerHelper('ios',function(){
  return ( navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false );
});
And another for Android:

Template.registerHelper('android',function(){
  return navigator.userAgent.toLowerCase().indexOf("android") > -1;
});
然后


在Cordova中,您可以使用检索有关正在运行的设备的信息

一旦安装,您将使用

device.platform
以确定正在哪个平台上运行

例如:

if (device.platform === 'Android') {
    // Android only code
}

if (device.platform === 'iOS') {
    // iOS only code
}

最后,对于这种情况,我们最好的解决办法是创建两个独立的应用程序服务器实例:一个用于ios和android。然后,我们将每种设备上的cordova版本的应用程序指向相应的服务器实例和url(ios.server.com、android.server.com)。它们都指向同一个Mongo数据库,所以所有的用户信息等最终都在同一个地方

这不是最优雅的解决方案,但确实有效。通过使软件包与这两个平台兼容,最终可能是一个更好的结果,我们可能会这样做,但这使我们能够启动并运行


这有一个小的好处,即将负载分离到两个实例中,从而便于分别处理这两种情况,并通过不同的服务器实例分别控制和监视它们的负载,等等。

创建合并项目主目录中的文件夹(不在www中)在里面创建iphone/android文件夹。然后添加依赖于平台的文件,cordova将在构建应用程序时复制该文件

如果您在www目录中有相同的文件,您应该使用相同的路径创建新文件,例如merges/android/js/controllers/myController.js将特定文件夹的文件替换为www/js/controllers/myController.js


注意:如果您只想替换all文件中的一个函数,这是可以完成的,但更复杂。要做到这一点,您应该使用Cordova Hooks。阅读相关内容,并创建一个脚本,将代码的特定部分复制到您想要的文件中…

依赖导航器的答案的可能副本不起作用,因为在此阶段尚未定义。副本中的第二个答案不使用
navigator
。我无法使其起作用。模板本身在这个阶段还没有定义,所以我得到package.js:9:1:Template没有定义。谢谢你的帮助。我无法让它工作,设备在onDeviceReady之后才定义(这在现阶段还不是真的,我迫不及待地等待,否则就我所知,设备永远不会准备好)。谢谢。也许可以尝试一些类似于为每个平台合并的方法,这些方法可以更改一些CSS类,您可以使用这些类在运行时计算出哪个平台。查看在Cordova中设置合并功能的示例。或者为每个平台使用一个预构建钩子&让钩子脚本将“ios”类添加到ios的HTML主体中,将“android”添加到android主体中,然后使用标准domapi计算出哪个主体类和您所在的平台。
if (device.platform === 'Android') {
    // Android only code
}

if (device.platform === 'iOS') {
    // iOS only code
}