我的Meteor创建的应用程序现在正在通过Meteor的HCP(热代码推送)进行升级,这意味着用户只要重新启动应用程序就会得到新版本,无需任何信息或确认对话框。
HCP 很棒,但有两个原因导致一些用户不希望应用程序悄悄升级:
- 新版本可能存在降级或其他风险。
- 旧版本足以满足他们的使用。
所以我想知道是否有一种方法,我可以向用户显示一个新版本可用的对话框,描述新版本的功能,并询问他是否升级。当他同意后,使用HCP进行升级工作,或者如果此时HCP无法使用,则通过编写代码下载必要的包。
顺便说一句,我还有另一个相关问题:为什么 HCP 只能在 Android 手机上工作,如何使其在 iOS 手机上工作。
提前非常感谢您回答这两个问题中的任何一个或两个问题。 谢谢。
最佳答案
By the way I have another question related: Why HCP only work on android phone, how to make it work on iOS phone.
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 元素来处理它。
例如,我们总是在 _onMigrate
钩子(Hook)中返回 [false]
。向用户显示漂亮的弹出窗口。如果用户选择立即更新,我们将触发下一个函数(选择您需要的选项):
// 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);
}
关于android - 如何升级 meteor 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44695207/