2017-06-22 188 views
0

Meteor创建的我的应用程序现在通过Meteor的HCP(Hot Code Push)进行升级,这意味着用户在重新启动应用程序后将立即获得新版本,而无需任何信息或确认对话框。如何升级流星应用程序

HCP是伟大的,但有两个原因,有些用户不希望在App悄然升级:

  1. 新版本可能有降级或其他风险。
  2. 旧版本足够他们的使用。

所以我想知道是否有办法,我可以向用户展示一个描述新版本功能的新版本对话框,并询问他是否升级。当他同意时,使用HCP进行升级工作,或者如果HCP在这种情况下不可用,则通过编写代码下载必要的软件包。

顺便说一句,我有另一个相关的问题:为什么HCP只适用于Android手机,如何使它在iOS手机上工作。

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

+0

热代码推送与流星** **不与iOS的工作。如果您遇到问题,请随时打开一个新问题。 – ghybs

回答

1

顺便说一下,我有另一个相关的问题:为什么HCP只适用于Android手机,如何使它在iOS手机上工作。

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

要显示提示对话框,你可以拦截HCP在Reload._onMigrate钩:

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); 
} 
+0

不好意思回复迟到。 Reload._onMigrate hook运行良好,谢谢。但如果我选择不升级,应用程序重新启动时它不会再问我。如果用户在第一次选择“否”后改变了主意,该如何升级? – vdonkey

+0

@vdonkey你可以设置一个超时询问重复升级或添加一个按钮升级,在用户界面的某个地方。 –

+0

多次失败后,我发现问题在哪里:在我使用应用程序的过程中,我更改了服务器,应用程序会问我是否立即升级。没事儿。但即使我选择不升级,App重新启动后,它仍然悄悄地升级到新版本。这不是我想要的。如果在“立即升级”时选择“否”,我想让用户使用旧版本?对话框显示,直到他有意地点击应用程序中某处的升级按钮。 – vdonkey