如何升级流星应用

时间:2017-06-22 09:17:08

标签: android ios cordova meteor upgrade

Meteor创建的我的应用程序正在通过Meteor的HCP(热门代码推送)进行升级,这意味着用户将在重新启动应用程序后立即获得新版本,而无需任何信息或确认对话框。< / p>

HCP很棒,但有些用户不希望应用程序安静升级有两个原因:

  1. 新版本可能会降级或存在其他风险。
  2. 旧版本足以供他们使用。
  3. 所以我想知道是否有办法,我可以向用户显示一个新版本的对话框,描述新版本的功能,并询问他是否升级。当他同意时,使用HCP进行升级工作,或者如果在这种情况下HCP不可用,则通过编写代码来下载必要的包。

    顺便说一下,我还有另外一个问题:为什么HCP只适用于Android手机,如何让它在iOS手机上运行。

    非常感谢您回答这两个问题中的任何一个问题,或两者兼而有之。 谢谢。

1 个答案:

答案 0 :(得分:1)

  

顺便说一下,我还有另外一个问题:为什么HCP只适用于Android手机,如何让它在iOS手机上运行。

HCP应该以相同的方式在所有平台上运行。

要显示提示对话框,您必须在Reload._onMigrate hook中拦截HCP:

import { Reload } from 'meteor/reload';

Reload._onMigrate(() => {
  const decision = confirm("New version is available, would you like to upgrade now?")
  return [decision]; // Return [false] to manually handle HCP
});

这是一个非常简单的示例,您可以触发不错的UI / UX元素来处理它。

例如,我们总是在[false]挂钩中返回_onMigrate。向用户显示不错的弹出窗口。如果用户现在选择更新,我们会触发下一个功能(您需要的选择):

// Purge and reload cache for AppCache package
window.applicationCache.swapCache();
window.applicationCache.update();

// Drop ServiceWorker cache
window.caches.keys().then((keys) => {
  keys.forEach((name) => {
    window.caches.delete(name);
  });
}).catch((err) => {
  console.error('window.caches.delete', err);
});

// Unregister Service Worker
SWRegistration.unregister();

// Reload the page
if (window.location.hash || window.location.href.endsWith("#")) {
  window.location.reload();
} else {
  window.location.replace(window.location.href);
}