用于設置支持Google Play免安裝體驗的應用的步驟(如創(chuàng)建您的第一個免安裝應用中所述)也適用于游戲。本指南著重介紹專用于游戲的一些設置步驟。
您可以使用Unity(無論是否帶有Google Play Instant Unity插件)、Cocos2D、Android Studio或自己的自定義引擎,開發(fā)支持Google Play免安裝體驗的游戲。
本指南假定您已了解自己想要提供的游戲體驗。如果您想了解制作高品質(zhì)游戲的理念和最佳做法,請參閱支持Google Play免安裝體驗的游戲的用戶體驗最佳做法。
此外,在發(fā)布支持Google Play免安裝體驗的游戲前,您還應查閱技術要求核對清單。
指定入口點
包含以下intent過濾器的Activity將作為Google Play免安裝體驗的入口點:
<activity android:name=".GameActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
當用戶點按Play商店中的立即體驗或Google Play游戲應用中的立刻開玩按鈕時,系統(tǒng)便會啟動該Activity。您也可使用深層鏈接API直接啟動該Activity。
注意:您可以將此入口點Activity與其他幾個Activity一起打包在一個模塊中,用以提供游戲的免安裝體驗。
定義正確的版本號
游戲的免安裝體驗版的版本號必須低于游戲的可安裝版本的版本號。通過這種方式對應用進行版本控制,有助于讓玩家從Google Play免安裝體驗過渡到在自己的設備上下載并安裝游戲。Android框架將這一過渡視為應用更新。
注意:如果玩家在自己的設備上安裝了游戲,則當用戶通過Google Play或某個鏈接啟動免安裝體驗時,將始終運行該安裝版,而非免安裝體驗版。即使所安裝的游戲版本低于免安裝體驗的版本,也是如此。
為確保遵循建議的版本控制方案,請遵循以下某種策略:
從頭開始重新設置Google Play免安裝體驗的版本號。
將安裝式APK的版本號提高一個較大的數(shù)值(如1000),以確保有足夠的空間來提高免安裝體驗的版本號。
您可以在兩個單獨的Android Studio項目中開發(fā)您的免安裝游戲和可安裝游戲。但是,如果您這樣做,則必須執(zhí)行以下操作才能將游戲發(fā)布到Google Play平臺上:
在兩個Android Studio項目中使用相同的軟件包名稱。
在Google Play管理中心將兩個變體上傳到同一應用。
注意:版本號不是面向用戶的值,主要由系統(tǒng)使用。面向用戶的版本名稱沒有限制。
如需詳細了解游戲版本設置,請參閱控制應用版本。
支持執(zhí)行環(huán)境
與其他應用一樣,支持Google Play免安裝體驗的游戲也在設備上的受限沙盒內(nèi)運行。為了支持此執(zhí)行環(huán)境,請完成以下各部分中所示的步驟。
選擇停用明文流量
支持Google Play免安裝體驗的游戲不支持HTTP流量。如果游戲以Android 9(API級別28)或更高版本為目標平臺,Android會默認停用游戲中的明文支持。
而如果游戲以Android 8.1(API級別27)或更低版本為目標平臺,則必須創(chuàng)建一個網(wǎng)絡安全配置文件。在此文件中,應將cleartextTrafficPermitted設為false,如以下代碼段所示:
res/xml/network_security_config.xml
<?xml version="1.0"encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">secure.example.com</domain>
</domain-config>
</network-security-config>
更新目標沙盒版本
更新免安裝游戲的AndroidManifest.xml文件,使其以Google Play免安裝體驗支持的沙盒環(huán)境為目標平臺。您可以通過將android:targetSandboxVersion屬性添加到游戲的<manifest>元素來完成此更新,如以下代碼段所示:
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
...
android:targetSandboxVersion="2"...>
如需了解詳情,請參閱targetSandboxVersion屬性文檔。
不要依賴于緩存或應用數(shù)據(jù)的存在
已下載的免安裝體驗仍會保留在用戶的設備上,直到免安裝體驗緩存被清除。系統(tǒng)會在出現(xiàn)以下情況時執(zhí)行清除操作:
由于設備的可用內(nèi)存不足,系統(tǒng)會對免安裝體驗緩存進行垃圾回收。
用戶重啟設備。
如果出現(xiàn)上述任一情況,用戶必須重新下載免安裝體驗才能與之互動。
如果系統(tǒng)運行所用的存儲空間很少,可能會將免安裝體驗的用戶數(shù)據(jù)從內(nèi)部存儲空間中移除。因此,建議您定期將用戶數(shù)據(jù)與游戲服務器進行同步,以便保留用戶的進度。
縮減APK的大小
與其他類型的應用不同,支持Google Play免安裝體驗的游戲具有15MB的下載大小限制。為了創(chuàng)建此大小的游戲,您可能需要重構游戲的邏輯。本部分將介紹一些可以幫助您優(yōu)化游戲大小的工具和技巧。
工具
下面的工具可以幫助您確定哪些內(nèi)容構成了游戲的大小:
APK分析器:提供關于已編譯的APK所含內(nèi)容的完整視圖。通過該視圖,您可以了解各個元素在總體大小中所占的字節(jié)數(shù)。此工具可以快速檢查游戲所用的資源、素材資源、邏輯和原生庫的大小。
Bloaty McBloatface:顯示二進制文件的大小配置文件。
Android GPU檢查器:在不重新編譯游戲的情況下,查看縮減紋理大小對文件大小的影響。
技巧
下面列出的技巧可以幫助您縮減游戲的大小:
提取游戲的部分邏輯并將其放入一個或多個功能模塊中,這些模塊不會計入大小限制。
降低游戲紋理的分辨率。
考慮使用WebP格式,特別是在GPU上使用未壓縮的紋理時。以WebP格式創(chuàng)建的圖像的質(zhì)量與JPEG圖像的質(zhì)量相同,但大小會縮減15%到30%。雖然解壓縮WebP圖像需要花費更長的時間,但此時間仍然比下載游戲紋理所需的時間要短得多。Google也將此格式整合到了開源游戲引擎中。
壓縮或重復使用聲音和音樂。
使用不同的編譯標記來幫助縮小二進制文件:
-fvisibility=hidden是最重要的一個。在cmake中,您可以按照如下方式來指定它:
$set_target_properties(your-target PROPERTIES CXX_VISIBILITY_PRESET hidden)
-Oz對縮減大小也很重要。如果使用gcc進行編譯,請改用-Os。
-flto有時可以縮減文件大小。
連接器標記:將--gc-sections和編譯器標記(如-ffunction-sections和-fdata-sections)搭配使用。
使用Proguard壓縮代碼和資源。
使用Gradle 4.4或更高版本生成更小的DEX文件。
實現(xiàn)資源的云端分發(fā)。
將大型游戲分割為多個APK
即使采用了縮減APK大小的建議,也可能很難通過優(yōu)化Google Play免安裝體驗來使游戲容納到單個15MB的APK中。為克服這一困難,您可以將游戲分割為多個APK。玩家可以先下載主要的基礎APK,然后在他們玩游戲的過程中,游戲可以從后臺調(diào)用其他拆分APK。
例如,基礎APK可以包含核心游戲引擎以及顯示加載屏幕所需的資源?;AAPK啟動后,它會顯示加載屏幕,并立即請求包含游戲和關卡數(shù)據(jù)的其他拆分APK。在這個拆分APK可用后,它可以將其資源加載到游戲引擎中,并向玩家提供開始游戲所需的內(nèi)容。
采用用戶體驗最佳做法
將游戲配置為支持免安裝體驗后,您可以添加以下各部分中介紹的邏輯以提供良好的用戶體驗。
檢查游戲是否在運行免安裝體驗
如果游戲的部分邏輯依賴于用戶是否參與了免安裝體驗,請調(diào)用isInstantApp()方法。如果當前正在運行的進程是免安裝體驗,此方法會返回true。
通過執(zhí)行此檢查,您可以確定應用是需要在有限的執(zhí)行環(huán)境中運行,還是可以利用平臺功能。
顯示安裝提示
如果您構建了Google Play免安裝試玩體驗,游戲應在某個時刻提示玩家在其設備上安裝完整版游戲。為此,請使用Google APIs for Android中的showInstallPrompt()方法。
如需進一步了解應如何以及何時提示玩家安裝游戲,請參閱支持Google Play免安裝體驗的游戲的用戶體驗最佳做法。
將數(shù)據(jù)轉移到安裝式體驗
如果玩家喜歡您的試玩體驗,他們可能會決定安裝完整版游戲。為了提供良好的用戶體驗,請務必將玩家的游戲進度從免安裝體驗轉移到完整版游戲上。
如果玩家使用的設備搭載的是Android 8.0(API級別26)或更高版本,并且您的游戲?qū)argetSandboxVersion指定為2,則玩家的游戲進度會自動轉移到完整版游戲上。否則,您必須手動轉移與玩家游戲進度相關的數(shù)據(jù)。為此,請使用以下某個API:
對于使用搭載Android 8.0(API級別26)或更高版本的設備的用戶,請使用Cookie API-應用示例
如果玩家可以在搭載Android 7.1(API級別25)及更低版本的設備上與您的體驗互動,請?zhí)砑訉torage API的支持-應用示例