這很重要
Visual Studio App Center 於 2025 年 3 月 31 日淘汰,但分析和診斷功能除外,這些功能將持續支援到 2026 年 6 月 30 日。 瞭解更多資訊。
App Center 散發套件可讓使用者/測試人員在透過App Center發佈應用程式之後安裝新版本的應用程式。 啟用之後,SDK 會向用戶顯示更新對話方塊,以下載或延後安裝最新的更新。 一旦他們選擇更新,SDK 就會開始更新您的應用程式。
這很重要
適用於 Unity 的散發 SDK 不支援 UWP。 此頁面中的指示僅涵蓋Android和iOS。
警告
Google Play 會將應用程式內更新程式代碼視為惡意行為,即使它未在運行時間使用也一樣。 將您的應用程式提交至Google Play之前,請先依照 本節 中的指示移除此程序代碼。 若無法移除應用程式內更新程序代碼,可能會導致Google Play中的應用程式不符合規範和移除。
備註
如果您正在執行自動化UI測試,啟用的應用程式內更新將會封鎖您的自動化UI測試,因為它們會嘗試對App Center後端進行驗證。 我們建議您停用應用程式內更新,以進行 UI 測試。
將應用程式內更新新增至您的應用程式
新增 App Center 散發模組
App Center SDK 是使用模組化方法所設計,開發人員只需要整合他們感興趣的服務模組。
如果您尚未在應用程式中設定並啟動 SDK,請遵循 Unity 使用者入門 檔。 請務必匯入 App Center 散發套件。 名稱格式應為 AppCenterDistribute-v{version}.unitypackage。
備註
Android 10 或更高版本對背景的啟動活動有限制。 請參閱有關 從背景啟動活動的限制一文。
備註
在 Android 10 上執行的應用程式(Go 版本)無法接收 SYSTEM_ALERT_WINDOW 許可權。 請參閱 Go 裝置上SYSTEM_ALERT_WINDOW的相關文章。
備註
從 Android 11 開始, ACTION_MANAGE_OVERLAY_PERMISSION 意圖一律會將使用者帶到最上層的 [設定] 畫面,讓使用者可以授與或撤銷 SYSTEM_ALERT_WINDOW 應用程式的許可權。 請參閱 Android 11 中許可權更新的相關文章。
移除針對 Google Play 組建的應用程式內更新
Google Play 會將應用程式內更新程式代碼視為惡意行為,即使它未在運行時間使用也一樣。 將您的應用程式提交至Google Play之前,請先移除此程序代碼。 若無法移除應用程式內更新程序代碼,可能會導致Google Play中的應用程式不符合規範和移除。 若要移除應用程式內更新的原生代碼,請在附加 AppCenterBehavior 的遊戲物件上,於 散發 區段中取消勾選 使用散發 的選項。
使用私人發佈群組
根據預設,Distribute 會使用公開散發群組。 如果您想要使用私人通訊群組,您必須變更 UpdateTrack 為 [私人]。
若要這樣做,請在已附加 AppCenterBehavior 的遊戲物件上,於 分發 區段的 [更新渠道] 下拉式清單中選擇 [私人]。
使用私人瀏覽時,瀏覽器視窗會開啟以驗證使用者。 所有後續的更新檢查都會在私有軌道上取得最新版本。
如果使用者在 私人渠道,這表示成功驗證後,他們會從自己所屬的任何私人發行群組獲得最新版本。 如果使用者在 公用軌道上,這表示他們將從任何公用通訊群組取得最新版本。
禁用自動更新檢查
根據預設,SDK 會自動檢查新版本:
- 應用程式啟動時。
- 當應用程式進入背景後,再次回到前景。
- 啟用散發模組(如果之前已停用的話)。
如果您想要手動檢查新版本,您可以停用更新的自動檢查。
若要這樣做,請取消核取已附加AppCenterBehavior遊戲物件上 [散發] 區段底下的 [自動檢查更新] 複選框。
接著,您可以使用 CheckForUpdate 下一節所述的 API。
手動檢查更新
Distribute.CheckForUpdate();
這會將要求傳送至 App Center,並在有新版本可用時顯示更新對話方塊。
備註
即使啟用自動更新,更新呼叫的手動檢查仍可運作。 如果已完成另一項檢查,則會忽略更新的手動檢查。 如果使用者已延後更新,將不會處理更新的手動檢查(除非最新版本是強制更新)。
自訂或當地語系化應用程式內更新對話方塊
1.自定義或本地化文字
如果您想要當地語系化更新對話框中顯示的文字,則可以提供自己的資源字串。 查看 此 iOS 資源檔中的 iOS 字串檔案,以及 此 Android 資源檔中的 Android 字串檔案。 使用相同的字串名稱/索引鍵,並指定本地化的值,使其顯示在您自己的應用程式資源檔的對話方塊中。
2.自定義更新對話框
您可以藉由實作 ReleaseAvailable 回呼函數來自訂預設更新對話框的外觀。
警告
您需要在應用程式載入的第一個場景中,在MonoBehaviour的方法Awake中註冊回呼,以避免遺漏任何發行回呼調用。
// In this example, OnReleaseAvailable is a method name in same class
Distribute.ReleaseAvailable = OnReleaseAvailable;
以下是以自訂邏輯取代 SDK 對話框的回呼實作:
bool OnReleaseAvailable(ReleaseDetails releaseDetails)
{
// Look at releaseDetails public properties to get version information, release notes text or release notes URL
string versionName = releaseDetails.ShortVersion;
string versionCodeOrBuildNumber = releaseDetails.Version;
string releaseNotes = releaseDetails.ReleaseNotes;
Uri releaseNotesUrl = releaseDetails.ReleaseNotesUrl;
// (Do something with the values if you want)
// On mandatory update, user can't postpone
if (releaseDetails.MandatoryUpdate)
{
// Force user to update (you should probably show some custom UI here)
Distribute.NotifyUpdateAction(UpdateAction.Update);
}
else
{
// Allow user to update or postpone (you should probably show some custom UI here)
// "GetUserUpdateAction()" isn't part of the SDK; it just represents a way of getting user response.
// This blocks the thread while awaiting the user's response! This example shouldn't be used literally
UpdateAction updateAction = GetUserUpdateAction();
Distribute.NotifyUpdateAction(updateAction);
}
// Return true if you're using your own UI to get user response, false otherwise
return true;
}
Android 的實作注意事項:
如範例所示,如果您的回呼傳回 true,您必須呼叫 Distribute.NotifyUpdateAction(UpdateAction.UPDATE); 或 Distribute.NotifyUpdateAction(UpdateAction.POSTPONE);。
如果您未呼叫 NotifyUpdateAction,則會在每次活動變更時反覆執行回調函數。
在活動於使用者動作通知 SDK 之前發生變更的情況下,可以再次使用相同的版本來呼叫該回呼。
需要此行為才能涵蓋下列案例:
- 您的應用程式會傳送到背景(例如按 HOME 鍵),然後在不同的活動中繼續。
- 您的活動是由另一個活動所涵蓋,而不需要離開應用程式(例如按下某些通知)。
- 類似上述案例。
在此情況下,裝載對話框的活動可能會取代,而不需要用戶互動。 因此,SDK 會再次呼叫接聽程式,以便還原自定義對話方塊。
3.如果找不到任何更新,請執行程序代碼
當 SDK 檢查更新時,如果找不到比當前使用版本更新的版本,則會觸發 NoReleaseAvailable 回呼。 這可讓您在這類案例中執行自定義程式碼。
您必須在呼叫之前註冊回 AppCenter.Start 呼,如下列範例所示:
// In this example OnNoReleaseAvailable is a method name in same class
Distribute.NoReleaseAvailable = OnNoReleaseAvailable;
AppCenter.Start(...);
void OnNoReleaseAvailable()
{
AppCenterLog.Info(LogTag, "No release available callback invoked.");
}
## Enable or disable App Center Distribute at runtime
You can enable and disable App Center Distribute at runtime. If you disable it, the SDK won't provide any in-app update functionality but you can still use the Distribute service in the App Center portal.
To disable the Distribute service, use the following code:
```csharp
Distribute.SetEnabledAsync(false);
若要再次啟用App Center散發,請使用相同的API,但傳遞 true 做為參數。
Distribute.SetEnabledAsync(true);
此 API 是異步的,您可以在 我們的 App Center 異步 API 指南中深入瞭解。
您不需要等候此呼叫,即可讓其他 API 呼叫 (例如) IsEnabledAsync保持一致。
狀態會保存在裝置跨應用程式啟動時的記憶體中。
檢查 App Center 分發是否已啟用
您也可以檢查 App Center 散發是否已啟用:
Distribute.IsEnabledAsync();
此 API 是異步的,您可以在 我們的 App Center 異步 API 指南中深入瞭解。
啟用偵錯組建的應用程式內更新
根據預設,應用程式內更新只會針對發行組建啟用。
若要在 Android 和 iOS 上啟用偵錯構建的應用程式內更新,請在附有 AppCenterBehavior 的遊戲物件的 [散發] 區段下,勾選 [在偵錯中啟用散發] 核取方塊。
在 Unity 中,可偵錯組建是已核取 [開發組建 ] 選項的組建。
在應用程式關閉以進行更新之前,立即執行清除
備註
此回呼僅適用於 iOS。
註冊回調函數,如下列範例所示:
// In this example, OnWillExitApp is a method name in same class
Distribute.WillExitApp = OnWillExitApp;
void OnWillExitApp()
{
// Perform clean up here
}
如此一來,當 Distribute 即將關閉時,將會叫用 OnWillExitApp()。
應用程式內更新的運作方式
備註
若要讓應用程式內更新能夠運作,應該從鏈接下載應用程式組建。 如果從 IDE 或手動安裝,它將無法運作。
應用程式內更新功能的運作方式如下:
- 此功能僅適用於透過 App Center 散發 服務(預設)分發的 RELEASE 組建。 如果開啟 iOS 引導式存取功能,將無法運作。
- 整合 SDK 之後,請建置應用程式的發行版本,並將它上傳至 App Center。 通訊群組中的用戶會透過電子郵件收到有關新版本的通知。
- 當使用者在其電子郵件中開啟連結時,應用程式將會安裝在其裝置上。 請務必使用電子郵件連結來安裝 - 我們不支援側載。 從鏈接下載應用程式時,SDK 會從 Cookie 儲存重要資訊,以便稍後檢查更新,否則 SDK 沒有該金鑰資訊。
- 如果應用程式將追蹤設定為私用,瀏覽器將會開啟以驗證使用者並啟用應用程式內更新。 只要驗證資訊仍然有效,即使切換回公用追蹤,稍後再切換回私人,瀏覽器也不會再次開啟。 如果瀏覽器驗證成功,用戶會自動重新導向回應用程式。 如果曲目是公用的(這是預設值),則下一個步驟會直接執行。
- 應用程式的新版本會顯示應用程式內更新對話框,詢問使用者是否要更新您的應用程式:
- iOS:
-
CFBundleShortVersionString的較高值 - 相等值
CFBundleShortVersionString,但 值CFBundleVersion較高。 - 版本相同,但組建唯一標識符不同。
-
- Android:
-
versionCode的較高值 - 與
versionCode相等的值,但與versionName不同的值。
-
- iOS:
小提示
如果您第二次上傳相同的.apk/.ipa,由於二進位檔相同,因此對話框不會顯示。 在 iOS 上,如果您上傳具有相同版本屬性的新組建,則會顯示更新對話方塊。 這是因為它是不同的二進位檔。 在Android上,如果兩個版本屬性都相同,二進位檔會視為相同。
如何測試應用程式內更新?
您必須將發行組建 (使用 App Center SDK 的發佈模組) 上傳至 App Center 入口網站,以測試應用程式內更新,每次增加版本號碼。
- 如果您尚未這麼做,請在App Center入口網站中建立您的應用程式。
- 建立新的通訊群組,併為其命名。
- 將自己(或想要包含在應用程式內更新功能測試中的所有人員)加入。 在這個步驟中,使用新的或一次性電子郵件地址,此應用程式未曾使用過的。 這可確保您的體驗接近實際測試人員的體驗。
- 建立您的應用程式的一個新版本,其中包含App Center發佈,以及如下所述的設定邏輯。 如果群組是私人的,請記得在開始使用
UpdateTrack屬性之前,先設定私人應用程式內更新追蹤。 - 按兩下入口網站中的 [ 發佈新版本 ] 按鈕,並上傳應用程式的組建。
- 上傳完成後,按 [下一步],然後選取您先前建立為該應用程式散發目的地的通訊群組。
- 檢閱 [散發] 並將組建發佈至您的應用程式內測試群組。
- 該群組中的人員將會收到成為應用程式測試人員的邀請。 一旦他們接受邀請,他們就可以從其行動裝置從 App Center 入口網站下載應用程式。 安裝應用程式內更新之後,您就可以測試應用程式內更新。
- 升級應用程式版本(
CFBundleShortVersionString或CFBundleVersion用於 iOS,versionCode用於 Android)。 - 建置應用程式的發行版本,並上傳新組建,就像您在上一個步驟中所做的一樣。 散發至您稍早建立的 通訊群組 。 當應用程式下次啟動時,通訊群組的成員將會收到提示更新到新版本。
小提示
請查看如何使用 App Center散發 的相關信息,以取得 有關通訊群組 等的詳細資訊。雖然您可以使用App Center Distribute 來發布新版本的應用程式,而不新增任何程式代碼,但將App Center Distribute 新增至應用程式程序代碼,將會導致測試人員和使用者在取得應用程式內更新體驗時,獲得更順暢的體驗。