zoukankan      html  css  js  c++  java
  • ionic cordova 热更新

      因为项目需要,使用cordova的热更新插件,本地调试很简单,看连接https://github.com/nordnet/cordova-hot-code-push,就几步,这里不说了。

     下面两个要装下

      npm install -g cordova-hot-code-push-cli(用来动态生成chcp.json和chcp.manifest两个文件)

         cordova plugin add cordova-hot-code-push-plugin (插件)

      真正放到服务器老是不管用,查看源码:

      

      

     // check if new version is available
            if ([newAppConfig.contentConfig.releaseVersion isEqualToString:_oldAppConfig.contentConfig.releaseVersion]) {
                [self notifyNothingToUpdate:newAppConfig];
                return;
            }
    View Code

      逻辑其实特别简单,对比当前应用内和你服务器上的releaseversion,如果不一样,就去加载服务器的www文件,然后对比chcp.manifest下的hash值,更新文件,下次再打开应用时,就使用新的文件。记住是下次打开应用,才使用新的文件。

        

        放服务器上,注意几点:

      1.config.xml添加节点如下:

      <chcp>
        <config-file url="http:/yourserver/www/chcp.json" />
      </chcp>

      2.生成平台代码,把平台代码下www文件夹下的chcp.json的content_url改成:

        http:/yourserver/www,确认对应的config.xml下chcp节点是对的。

        运行对应平台代码。

       3.命令进入自己项目根目录,运行cordova-hcp build,这个运行后,它会自动去改chcp.json下的release值, 

       和chcp.manifest下的改过的文件的hash

      4.把你改过的文件,chcp.json,chcp.manifest这些本地的放到服务器上。覆盖对应的文件(当然都在www文件夹下,可以直接上传www)。

      git官网上讲的是本地服务器测试,没什么问题,放到自己服务器,还是要注意下。当然不理解很容易急,最好就是自己在oc里打断点,看到releaseversion是不是一样,然后下载后的文件是不是一样,就知道你哪里改的不对了。

      另外,其他一些问题:

      如果你跑cordova-hcp build,它会去生成chcp.json,那里面的值就改了,可以在项目根目录建一个cordova-hcp.json,写一些default配置

      cordova-hcp.json 可以长这样
      

    {
    "content_url": "http://yourserverAddress/www",
    "autogenerated": true,
    "update": "now"
    }
    

      

      IOS

      ios里报_-swift.h找不到,把这个改成  项目名-swift.h,

        cordova.js一定要引用,下面的代码最终走到上面真正的去下载的地方,首先是js的

     1.

    // Called when Cordova is ready for work.
    // Here we will send default callback to the native side through which it will send to us different events.
    channel.onCordovaReady.subscribe(function() {
      ensureCustomEventExists();
      exec(nativeCallback, null, PLUGIN_NAME, pluginNativeMethod.INITIALIZE, []);
    });

    // Plugin methods on the native side that can be called from JavaScript

      pluginNativeMethod = {

        INITIALIZE: 'jsInitPlugin',

        FETCH_UPDATE: 'jsFetchUpdate',

        INSTALL_UPDATE: 'jsInstallUpdate',

        CONFIGURE: 'jsConfigure',

        REQUEST_APP_UPDATE: 'jsRequestAppUpdate',

        IS_UPDATE_AVAILABLE_FOR_INSTALLATION: 'jsIsUpdateAvailableForInstallation',

        GET_INFO: 'jsGetVersionInfo'

      };

     上面的jsInitPlugin,就在oc里,就是每次你启动app,初始化插件时,走这个jsInitPlugin,方法执行循序:

     jsInitPlugin-->

    [self _fetchUpdate:nil withOptions:nil]-->

    [self _fetchUpdate:command.callbackId withOptions:fetchOptions]-->

    [[HCPUpdateLoader sharedInstance] executeDownloadRequest:request error:&error] -->

    [self executeTask:task]-->

    [task runWithComplitionBlock:^{ _isExecuting = NO;}]-->

    - (void)runWithComplitionBlock:(void (^)(void))updateLoaderComplitionBlock{

       这里就是上面的更新代码

    }

     

        https://github.com/nordnet/cordova-hot-code-push/issues/223

      

  • 相关阅读:
    Java+7入门经典 -1 简介
    优化算法动画演示Alec Radford's animations for optimization algorithms
    如何写科技论文How to write a technical paper
    开始学习深度学习和循环神经网络Some starting points for deep learning and RNNs
    用500行Julia代码开始深度学习之旅 Beginning deep learning with 500 lines of Julia
    用10张图来看机器学习Machine learning in 10 pictures
    ICLR 2013 International Conference on Learning Representations深度学习论文papers
    ICLR 2014 International Conference on Learning Representations深度学习论文papers
    卷积神经网络CNN(Convolutional Neural Networks)没有原理只有实现
    卷积神经网络Convolutional Neural Networks
  • 原文地址:https://www.cnblogs.com/johnzhu/p/5830450.html
Copyright © 2011-2022 走看看