【问题标题】:Meteor 0.8.0 with Cordova 3.4.0Meteor 0.8.0 和 Cordova 3.4.0
【发布时间】:2014-07-01 01:13:45
【问题描述】:

我有一个 Meteor 0.8 项目,我正在尝试通过一个 Cordova 插件与 Google 和 Apple 推送通知集成,我已经为另一个项目编写了作品。我正在使用这个 plugin,它在之前版本的 Meteor 中被推荐,但是在阅读了这个 post 之后,我不确定这个插件是否有用。

在我的流星项目中,我有以下代码在启动时被调用以获取当前版本:

Meteor.startup(function () {
    console.log("initiating cordova...");
    var cordova = new cordova();

    var version = {
        appVersion: function (args, successCallback, errorCallback) {
            if (is.iOS) {
                cordova.exec(successCallback, errorCallback, "PackageInfo", "getVersion", args);

            } else if (is.Android) {
                cordova.exec(successCallback, errorCallback, "PackageInfo", "getVersion", args);
            }
        }
    };

    alert("Current Version:  " + version.appVersion());

});

在我的 Cordova 项目中,我有以下 iframe Meteor 代码:

<iframe id="meteor" src="http://meteor-cord.meteor.com">
</iframe>
<script type="text/javascript">

    shellVersion = '0.0.1';

    meteor = new MeteorCordova('meteor'); // The iFrame id "meteor"

    // meteor.initPush({ senderID: 'xxxxxxxxxxxxxxxx' });

</script>

关于如何让它工作以便我可以在最新版本的 Meteor 中使用 Cordova 插件的任何想法?

【问题讨论】:

    标签: cordova meteor


    【解决方案1】:

    我之前尝试过 MeteorCordova,但在 iOS 和键盘/文本输入事件方面遇到了很多问题。我最终切换到 MeteorRider,它解决了很多问题。它基本上从服务器获取 html 并将其注入 index.html 并重新触发 Meteor 事件。我们在 Android 和 iOS 上使用它。

    然后,您可以像使用本地 index.html 一样使用 PhoneGap 插件 API。

    我为 iOS 和 PhoneGap 3.3 创建了一个样板(3.4 也应该可以正常工作)。 https://github.com/AdamBrodzinski/meteor-cordova-shell

    您也可以将 www 文件夹复制粘贴到代表中。并将 index.html 的底部更改为指向您的流星服务器:

    <script type="text/javascript">
      // use this to track what version your user's are running
      var __MeteorRiderConfig__ = {
        // Your production meteor app
        meteorUrl:  "http://leaderboard.meteor.com/",
    
        // Your local dev meteor server url                        
        //meteorUrl:  "http://192.168.1.XX:3000",
    
        // Cordova version, bump this after a `cordova update <platform>`
        phonegapVersion: 3.3,
    
        phonegapAppVersion: 0.1
      };
    
      // Start up the phonegap
      phonegapapp.initialize();
    </script>
    

    如果仍然适用,您可以致电您的PackageInfo.getVersion()。然后,您可以执行device.platform 等操作...我还开源了一些 Meteor 包,以使准备/离线/等 cordova/phonegap 事件具有响应性、Meteor Phonegap Oauth 和其他一些。

    【讨论】:

    • 我看过这种方法,但 MeteorRider 的作者甚至说如果你使用 PhoneGap 插件,你应该使用 Meteor Cordova:github.com/zeroasterisk/MeteorRider。我特别需要能够进行推送通知。你用 MeteorRider 成功了吗?我今天要检查一下,如果我成功了会回复。
    • 我的 iPhone 上显示了该应用程序,但是如何从我的流星应用程序(特别是注入到 Cordova 应用程序的 /www index.html 中的应用程序)调用 Cordova 插件?
    • 啊,所以你可以在你的 Meteor 代码中使用普通的 PhoneGap API。无需插件。例如。如果你有设备 phonegap 插件,你可以使用 if (device.platform === 'iOS') 唯一需要注意的是设备就绪事件必须触发。所以在启动时运行的代码可以在此之前运行,所以我要么在文档中添加一个监听器,在一个 meteor.startup 函数内。
    • 嗯...收到“设备未定义”错误,但我认为这只是它没有正确重新加载的功能。感谢您的提示!
    • 对不起,忘了说,设备全局只有在安装设备插件后才可用:docs.phonegap.com/en/3.3.0/cordova_device_device.md.html#Device
    【解决方案2】:

    我认为你应该研究一下 packmeteor,它似乎是最新的方法。

    Pack Meteor on GitHub

    【讨论】:

      【解决方案3】:

      我刚刚发布了一个新软件包,它解决了上述方法的问题。安装和设置非常简单。检查自述文件。适用于 Cordova 3.5。


      概述

      Cordova Loader 的目标是让在 Cordova 中使用 Meteor 就像使用 Meteor 本身一样简单。编译器解释提供的 Cordova 项目目录并将资产编译成缩小的、特定于平台的 JavaScript 文件,这些文件放置在 Meteor /public 目录中。当客户端加载时,它会自动拉入该设备的特定于平台的文件。可以在 Meteor 中使用 Cordova API,就像在 vanilla JS 应用程序中一样。享受吧!

      Cordova Loader


      here描述的方法比较

      • 延迟加载 (cordova-phonegap):难以管理所有 Cordova 依赖项/未完成/过时
      • 劫持(流星骑士):初始加载缓慢/无法使用应用缓存/插件问题。
      • iFrame (meteor-cordova):iFrame 通常是一种痛苦,包括本机应用程序中的性能缓慢、滚动故障以及必须包装 Cordova
      • 科尔多瓦装载机:
        • 为您管理资产
        • 快速加载
        • 与应用缓存兼容
        • 与 Cordova 插件兼容
        • Cordova 无需包装器
        • 缩小特定于平台的捆绑包
        • 在客户端自动延迟加载特定于平台的包
        • 监视 Cordova 项目插件目录的更改

      【讨论】:

        猜你喜欢
        • 2014-05-07
        • 1970-01-01
        • 2014-05-11
        • 1970-01-01
        • 1970-01-01
        • 2014-05-08
        • 2014-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多