警告:Google Play 免安裝應用程式將停止提供服務。2025 年 12 月起,您無法透過 Google Play 發布免安裝應用程式,且所有 Google Play 服務免安裝 API 都將停止運作。Play 不會再透過任何機制向使用者提供免安裝應用程式。
我們根據開發人員的意見,並持續投入資源改善 Google Play Instant 推出後的生態系統,做出這項變更。
如要持續促進使用人數成長,建議開發人員使用深層連結,將使用者導向標準版應用程式或遊戲,並在適當情況下將他們重新導向至特定路徑或功能。
Unity 專用的 Google Play 免安裝外掛程式會設定 Unity 專案,以便建立遊戲的免安裝應用程式版本。本指南說明如何安裝及使用這項外掛程式。
下載並匯入外掛程式
這個外掛程式是 Unity 專用 Google Play 外掛程式的一部分。如要匯入外掛程式,請按照下列步驟操作:
- 從 適用於 Unity 版本的 Google Play 外掛程式 下載最新版本。
- 依序選取 Unity IDE 選單選項「Assets」>「Import package」>「Custom Package」,然後匯入所有項目,即可匯入
.unitypackage
檔案。
Unity 編輯器功能
匯入外掛程式,在 Unity 中新增「Google」>「Play Instant」子選單。這個子選單提供下列選項。
建構設定
開啟視窗,以便在「已安裝」和「即時」開發模式之間切換。切換至「即時」會進行下列變更:
- 建立名為
PLAY_INSTANT
的指令碼定義符號,可用於搭配#if PLAY_INSTANT
和#endif
進行指令碼編寫。 - 管理 AndroidManifest.xml 的更新,以進行特定必要變更,例如 android:targetSandboxVersion。
播放器設定
圖 1 所示的「Player Settings」對話方塊會顯示建議,協助您最佳化 Google Play 免安裝應用程式的支援功能、使用更多相容的圖形 API 進行開發,以及縮減 APK 大小。

這些播放器設定分為「必要」和「建議」設定。如果設定有對應的「更新」按鈕,請按一下該按鈕,將設定變更為偏好的值。
如要進一步縮減 APK 大小,請開啟 Unity Package Manager,並移除所有未使用的套件。
快速部署
快速部署功能可將部分資產封裝在 AssetBundle 中,藉此縮減以 Unity 為基礎的免安裝應用程式大小。使用快速部署時,Unity 遊戲引擎和載入畫面會封裝到免安裝應用程式 APK 中,免安裝應用程式啟動後,會從伺服器擷取 AssetBundle。
支援安裝工作流程
許多免安裝應用程式的目標是讓使用者在安裝完整版之前,先體驗應用程式。Unity 專用 Google Play 免安裝外掛程式提供 API,可顯示 Play 商店安裝對話方塊,以及將狀態從免安裝應用程式轉移至已安裝的應用程式。
顯示安裝提示
如果免安裝應用程式有「安裝」按鈕,可以從安裝按鈕點選處理常式呼叫下列項目,顯示 Play 商店安裝對話方塊:
Google.Play.Instant.InstallLauncher.ShowInstallPrompt();
ShowInstallPrompt()
方法有超載情況,可允許下列一或多項操作:
- 判斷使用者是否取消安裝程序。在免安裝應用程式的主要活動中覆寫
onActivityResult()
,並檢查指定requestCode
上的RESULT_CANCELED
。 - 透過
referrer
參數傳遞安裝參照網址字串。 - 透過
PutPostInstallIntentStringExtra()
傳遞目前遊戲工作階段的狀態。
請參考下列範例:
using Google.Play.Instant;
...
const int requestCode = 123;
var sessionInfo = /* Object serialized as a string representing player's current location, etc. */;
using (var activity = UnityPlayerHelper.GetCurrentActivity())
using (var postInstallIntent = InstallLauncher.CreatePostInstallIntent(activity))
{
InstallLauncher.PutPostInstallIntentStringExtra(postInstallIntent, "sessionInfo", sessionInfo);
InstallLauncher.ShowInstallPrompt(activity, requestCode, postInstallIntent, "test-referrer");
}
如果使用者完成應用程式安裝,Play 商店會使用提供的 postInstallIntent
重新啟動應用程式。已安裝的應用程式可以使用下列項目,擷取 postInstallIntent
中設定的值:
var sessionInfo = InstallLauncher.GetPostInstallIntentStringExtra("sessionInfo");
注意:
- 如果使用者安裝應用程式後取消啟動,
postInstallIntent
中包含的額外內容可能無法傳送至已安裝的應用程式。傳遞 Intent 額外資訊較適合用於保留有效工作階段狀態,而非保留持續性狀態;如要保留後者,請參閱 Cookie API。 - 任何人都可以使用額外欄位建構意圖,啟動已安裝的應用程式,因此如果酬載授予有價值的內容,請設計酬載,確保酬載只能使用一次、以密碼編譯方式簽署酬載,並在伺服器上驗證簽章。
使用 Cookie API
Cookie API 提供的方法可將 Cookie (例如玩家 ID 或關卡完成資料) 從免安裝應用程式傳遞至對應的已安裝應用程式。與 postInstallIntent
額外資訊不同,即使使用者未立即啟動已安裝的應用程式,Cookie 狀態仍可使用。舉例來說,免安裝應用程式可以從安裝按鈕點擊處理常式呼叫下列程式碼:
using Google.Play.Instant;
...
var playerInfo = /* Object serialized as a string representing game levels completed, etc. */;
var cookieBytes = System.Text.Encoding.UTF8.GetBytes(playerInfo);
try
{
var maxCookieSize = CookieApi.GetInstantAppCookieMaxSize();
if (cookieBytes.Length > maxCookieSize)
{
UnityEngine.Debug.LogErrorFormat("Cookie length {0} exceeds limit {1}.", cookieBytes.Length, maxCookieSize);
}
else if (CookieApi.SetInstantAppCookie(cookieBytes))
{
UnityEngine.Debug.Log("Successfully set cookie. Now display the app install dialog...");
InstallLauncher.ShowInstallPrompt();
}
else
{
UnityEngine.Debug.LogError("Failed to set cookie.");
}
}
catch (CookieApi.InstantAppCookieException ex)
{
UnityEngine.Debug.LogErrorFormat("Failed to set cookie: {0}", ex);
}
如果使用者完成應用程式安裝,安裝的應用程式可以使用下列程式碼擷取 Cookie 資料:
var cookieBytes = CookieApi.GetInstantAppCookie();
var playerInfoString = System.Text.Encoding.UTF8.GetString(cookieBytes);
if (!string.IsNullOrEmpty(playerInfoString))
{
// Initialize game state based on the cookie, e.g. skip tutorial level completed in instant app.
}