Meteor创建的我的应用程序正在通过Meteor的HCP(热门代码推送)进行升级,这意味着用户将在重新启动应用程序后立即获得新版本,而无需任何信息或确认对话框。< / p>
HCP很棒,但有些用户不希望应用程序安静升级有两个原因:
所以我想知道是否有办法,我可以向用户显示一个新版本的对话框,描述新版本的功能,并询问他是否升级。当他同意时,使用HCP进行升级工作,或者如果在这种情况下HCP不可用,则通过编写代码来下载必要的包。
顺便说一下,我还有另外一个问题:为什么HCP只适用于Android手机,如何让它在iOS手机上运行。
非常感谢您回答这两个问题中的任何一个问题,或两者兼而有之。 谢谢。
答案 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);
}