搭配 Unity 使用 Google Play 免安裝

Unity 適用的 Google Play 免安裝外掛程式會設定 Unity 專案,藉此建立 。本指南將說明如何安裝及使用 這個外掛程式

下載並匯入外掛程式

這個外掛程式是 Unity 專用 Google Play 外掛程式的一部分。匯入 外掛程式,請按照下列步驟操作:

  1. Unity 專用 Google Play 外掛程式下載最新版本。
  2. 選取 Unity IDE 選單選項,匯入 .unitypackage 檔案 素材資源 >匯入套件 >自訂套件並匯入所有項目。

Unity 編輯器功能

匯入外掛程式以新增 Google >在 Unity 中玩免安裝子選單。這個 子選單提供下列選項。

版本設定

系統會開啟一個視窗,讓您切換「已安裝」和「立即安裝」 開發模式切換至「立即」 會執行下列變更:

  • 建立名為 PLAY_INSTANT 的指令碼定義符號,可用於 使用 #if PLAY_INSTANT#endif 編寫指令碼。
  • 管理對 AndroidManifest.xml 的更新,以進行特定必要變更,例如: 為 android:targetSandboxVersion

播放器設定

圖 1 所示的「Player Settings」對話方塊顯示了實用建議 以提升 Google Play 免安裝技術的支援性,開發與相容性更高的版本 ,並縮減 APK 大小。

具體建議包括僅使用 OpenGL ES 2.0 和
  停用多執行緒轉譯功能。
圖 1. 「Player Settings」對話方塊

這些「玩家設定」分為必要建議類別 可以管理叢集設定,像是節點 資源調度、安全性和其他預先設定項目如果設定有對應的「更新」按鈕,按一下該設定即可 將設定變更為偏好的值。

如要進一步縮減 APK 大小,請開啟 Unity Package Manager,將任一 APK 移除 未使用的套件

快速部署

「快速部署」功能會封裝 AssetBundle。 使用快速部署時,系統會封裝 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 中的額外項目可能無法連接 。 傳遞意圖額外項目更適合保留啟用中的工作階段狀態 而不是用於保留持續狀態後者指的是 Cookie API。
  • 任何人都可以使用額外欄位建構意圖來啟動已安裝的 應用程式,因此如果酬載允許某項價值,請設計酬載 只能使用一次、經過加密簽署,然後驗證 網路伺服器簽章

Cookie API 提供傳遞 Cookie 的方法 (例如玩家 ID 或關卡 完成資料)。取消喜歡 另外 postInstallIntent 項額外資料,即使使用者瀏覽 Cookie 狀態,仍可使用 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.
}