2017-06-22 232 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