[IADP] 關於 Upgrade 的兩三事
我想首先需要解釋一下 Upgrade 是什麼:
“Intel 的 AppUp SDK library 在 com.intel.adp.Application 類別中提供了一個公開的非靜態方法, Upgrade,它會將目標應用程式(付費版)的 ID 傳送到 Intel AppUp center,以讓開發者能夠在應用程式(免費版)中做出升級前的「驗證動作」,而非真正的做出「升級動作」;如果驗證通過了,則此方法會自動打開 Intel AppIp(SM) center 的介面,並導到目標應用程式的頁面,供消費者(使用者)自行決定是否要升級。但請注意,就算安裝了付費版,免費版還是會同時存在。”
我們接著看 Upgrade 這個 Method 的定義是什麼:
public void Upgrade(AdpApplicationId targetAppId)
從以上可以看出 Upgrade 這個方法並沒有回傳值(void),但它會拋出 AdpRuntimeException 型別的 exception,而這 exception 的公開屬性「Code」是一個 ADP_RET_CODE 型別的列舉值。在 Upgrade 拋出的 exception 中,Code 這個屬性(property)的值只有以下圖片中的這三種可能:
其中需要特別注意的是 ADP_NOT_AUTHORIZED 這個列舉值,它代表這個應用程式(免費版)的升級「沒通過 Intel 驗證」,而發生例外之後可做的處理如同上圖中的 Meaning 所述,可「將現行應用程式關閉」、「允許應用程式繼續執行一段時間以供使用者取得授權」或是「允許應用程式以閹割版(免費版)的型態繼續執行」。
若是沒有拋出例外,則由 Intel AppUp(SM) center 介面接手做更新的動作。而 Upgrade 方法中的 targetAppId 參數代表「更新目標的 ID」,也就是付費版應用程式的 ID。它具有 AdpApplicationId 型別,這代表應用程式在 Intel AppUp Center 中的唯一識別值,是由四組不帶正負號的 long 整數所組成。在開發階段中,我們可以拿免費版應用程式的 ID 來當這個參數(免費版升級到免費版),或是善用 AdpConstants 這個列舉中的 ADP_DEBUG_APPLICATIONID 列舉值,例如以下的用法:
AdpApplication app = new com.intel.adp.AdpApplication(com.intel.adp.AdpConstants.ADP_DEBUG_APPLICATIONID);
app.Upgrade(com.intel.adp.AdpConstants.ADP_DEBUG_APPLICATIONID);
總結:
我們於前述可知,呼叫 Upgrade 方法時並不會得到回傳值,所以在官方文件中的範例程式碼皆以 try catch 來做流程控制,再根據捕捉到的 exception 裡所夾帶的 Error Code 來做相對應的處理。而呼叫了 Upgrade 方法並不代表已經做了升級動作;相反的,它只是付費版應用程式的 ID 傳送到 Intel AppUp(SM) center 進行驗證看看能不能提供出來給消費者下載安裝,驗證通過後才由該 center 介面提供更新 option 給 end user。