Instant App 常見問題官方指南 | Android 開發者 FAQ Vol.6

谷歌開發者_發表於2017-08-19

640?wx_fmt=gif


640?wx_fmt=png

我們被大家的熱情驚到了 —— 事實上我們發出上一篇 Instant App 的文章沒幾天就收到了一大堆問題。由於涉及到的類目太多,我們這裡簡單歸納了一下,方便大家檢視。如果還有更多問題也請隨時通過留言的方式與我們取得聯絡。



1. 基礎類問題

640?wx_fmt=jpeg

Q: 哪些裝置相容 Android Instant App?

A: Android Instant App 在執行 Android 6.0(API 級別 23)或更高版本的裝置上可用,此外還計劃為 Android 5.0(API 級別 21)新增額外的支援。例如,現在您可以在 Google Pixel、Google Nexus、Samsung Galaxy S7 等人氣裝置上開發 Instant App。


Q: 哪些國家和地區支援 Android Instant App?

A: 您可以在支援頁面中找到完整的支援國家和地區列表:

(https://support.google.com/googleplay/android-developer/answer/7381861#production)


Q: 開發者現在需要構建兩套不同的 Android 應用嗎?

A: 正相反,開發者只需使用一個原始碼樹維護一個專案即可。通過對專案進行配置,創造出兩套架構工件:可安裝版本和免安裝版本。在可安裝應用基礎上新增免安裝支援需要的工作量大小取決於可安裝應用的當前架構。

* 請注意,免安裝應用的版本號必須等於或小於上次釋出的可安裝應用版本。


Q: Instant App 都能使用什麼 Android API 和功能?

A: Android Instant App 設計的目的是擴充套件現存 App 的使用場景,而非取代它們。所以Android Instant App 使用同樣的 Android API,同樣的專案,同樣的原始碼。當然,由於Android Instant App 的 “免安裝” 特性,可能會無法符合使用者針對 “已安裝” 應用所抱有的一些期待。例如,免安裝應用無法使用後臺服務,無法啟用後臺通知,也無法使用裝置唯一識別符號。


Q: 使用者可以選擇永久安裝應用嗎?

A: 當然!開發者可以允許使用者從 Google Play 安裝應用。在安裝完成後,當使用者離開應用時,它仍會留在使用者的手機上 —— 就和現在大家正在做的事情一樣。 


Q: Android Instant App 的許可權需求是怎樣的?

A: Android Instant App 使用自 Android 6.0 (API 級別 23)以來採用的執行時許可權。


Q: 免安裝應用可以獲取哪些許可權?

A:免安裝應用可以使用下列 Android 許可權。沒有出現在下方列表中的許可權將無法在免安裝應用中使用。

  • BILLING

  • ACCESS_COARSE_LOCATION

  • ACCESS_FINE_LOCATION

  • ACCESS_NETWORK_STATE

  • CAMERA

  • INSTANT_APP_FOREGROUND_SERVICE 僅限 Android O

  • INTERNET

  • READ_PHONE_NUMBERS 僅限 Android O

  • RECORD_AUDIO

  • VIBRATE


Q:免安裝應用對網路訪問有哪些限制?

A:來自免安裝應用的一切網路流量均必須使用 HTTPS,不支援 HTTP。


Q:開發者要如何釋出這些應用?

A:開發者需要經由 Google Play Console 釋出免安裝應用,這一點與現有的 Android 應用並無兩樣。想要了解更多資訊,請參閱 “釋出您的免安裝應用” :

(https://support.google.com/googleplay/android-developer/answer/7381861)


Q:免安裝應用必須使用 Smart Lock 麼?

A:是的,我們規定在免安裝中的登入體驗必須使用 Smart Lock。想要進一步瞭解如何在應用中使用 Smart Lock,請參閱 “為您的 Android 密碼使用 Smart Lock” :

(https://developers.google.cn/identity/smartlock-passwords/android/)


Q:我能不能在沒有可安裝版本 Android 應用的情況下實現一個免安裝應用?

A:不能。您必須首先在 Google Play 中擁有一個該 App 的可安裝版本。


Q:我們能在裡面使用 WebP 圖片格式嗎?

A:當然可以,我們推薦使用 WebP 格式的圖片。想要了解更多資訊,請參閱 “如何縮減下載圖片的大小” :

(https://developer.android.google.cn/topic/performance/network-xfer.html#webp)


Q:免安裝應用在 Google 網頁搜尋中將會如何呈現?

A:免安裝應用與可安裝應用的搜尋顯示結果並無不同。在搜尋結果中,免安裝應用會顯示出應用圖示,如果該 URL 已與免安裝應用相關聯,則還會顯示 “Instant” 標籤,正如搜尋結果中的可安裝應用會在圖示上顯示 “Installed” 標籤一樣。


Q:我能使用 Android Instant App 的形式來承載我的遊戲嗎?

A:遊戲是極為特別的一類應用,它們通常擁有獨特的工具庫和龐大的資產庫,對效能表現的要求也很高。即使如此,我們對探索遊戲使用者的使用案例也充滿興趣。請前往 StackOverflow 瀏覽有關 Android Instant App 的帖子,不少人也在討論這個話題。



2. 專案結構、功能和架構

640?wx_fmt=png

Q:免安裝應用和可安裝應用是否擁有不同的 build.gradle 檔案?

A:如果您的可安裝應用和免安裝應用來自同一個 Android Studio 專案,那麼答案是肯定的,兩種應用需要不同的 build.gradle 檔案。您必須使用符合 com.android.application 構建規則的模組來構建您的可安裝應用,而當您構建免安裝應用時則需要使用符合 com.android.instantapp 構建規則的模組。想要了解更多資訊,請參閱 “專案結構” :

(https://developer.android.google.cn/topic/instant-apps/getting-started/structure.html#structure_of_a_basic_instant_app)


Q:我能獨立編譯可安裝與免安裝應用嗎?

A:正如上面 “專案結構” 中所展示的那樣,我們推薦採用的工程結構應該優先將獨立的功能封裝成模組,這樣可安裝應用和免安裝應用都可以依賴這些庫模組。如果您遵循我們推薦的工程結構,您就可以獨立編譯每個功能而不涉及其他。


Q:我應該如何在免安裝應用中的不同頁面之間進行導航?

A:您可以通過進入一條目標頁面的 URL 來導航過去。由於這個原因,免安裝應用中的頁面均需滿足這個條件:可被 URL 定址。想要了解更多如何讓app頁面可被 URL 定址的內容,請參閱 “如何從 Google Play 請求功能” :

(https://developer.android.google.cn/topic/instant-apps/overview.html#play_store)

和 “實現應用連結” :

(https://developer.android.google.cn/topic/instant-apps/getting-started/index.html#app-links)


Q:我能在我的主應用裡處理深度連結(Deep Link),然後再呼叫其他免安裝應用的頁面嗎?

A:免安裝應用需要在功能上實現模組化,通過主應用集中處理與此相矛盾。使用 App Link 即可進行您需要的連結跳轉功能,同時保持免安裝應用的模組化特性。


Q:我能在一個功能內包含多個頁面嗎?

A:您可以在一個功能內包含多個頁面。但您需要留意的是,免安裝應用下載有 4MB 的大小限制。同時,每個功能都需要用一個頁面作為入口。


Q:我能在不同功能之間共享資源嗎?

A:可以,基本功能(Base Feature)內的資源可以被所有功能分享。包含在附加功能之內的資源則只能被這個功能所使用。想要了解更多關於如何搭建您的專案資源,以及如何在不同功能之間共享資源,請參閱上面提到的 “專案結構”。

額外再說一點,您必須把位於附加功能和基本功能之間的資源 ID 區分開來。例如,如果您的基本功能提供了一個名為 R.id.feature_layout 的資源 ID,但您的附加功能卻定義了另一個同 ID 資源,那麼免安裝應用就會使用來自基本功能的資源,而不會使用來自附加功能的資源。

此外,所有隨著功能模組的產生而被引用的資源都必須在基本功能模組內出現。


Q:如果應用內有兩個功能,它們是否會共享儲存?

A:會,多個功能會在同一程式中執行,並共享應用上下文,只要它們屬於同一個免安裝應用。但是,免安裝應用相較於可安裝 APK 而言擁有一些限制。想要了解更多資訊,請參閱 “瞭解受限和不受支援的功能” :

(https://developer.android.google.cn/topic/instant-apps/prepare.html#restricted)


Q:我能在同一頁面內的 view-pager 中擁有多個分段(Fragment)嗎?

A:可以,您能在單一頁面中擁有多個分段,並在功能內定義與頁面相關的分段。但請記住分段不能與深連結相關,並且不能獨立於頁面啟動。


Q:免安裝應用應該擁有獨立的應用圖示嗎?

A:不,免安裝應用和可安裝應用應該使用同一個圖示。可安裝應用和免安裝應用應該為使用者提供一致的體驗,因此它們應該使用同樣的視覺元素(如圖示)。

想要了解更多關於如何關聯免安裝應用和可安裝應用的資訊,請參閱 “同一個應用,安裝前與安裝後”:

(https://developer.android.google.cn/topic/instant-apps/ux-best-practices.html#instant-v-installed)


Q:我如何才能分辨出我的應用正在以可安裝模式還是免安裝模式執行?

A:您可以使用靜態的 InstantApps.isInstantApp ( ) 方法。如果接受測試的程式屬於一個免安裝應用,這個方法的返回值將為 True 。


Q:我要如何鼓勵使用者從免安裝應用中安裝我的應用?

A:您可以使用靜態的 InstantApps.showInstallPrompt ( ) 方法。這種方法會鼓勵使用者安裝常規 APK 版本的應用。


Q:為各種功能使用的不同的 APK 會不會在 Google Play 裡顯示為不同的產品?

A:不會,免安裝應用與可安裝應用共享相同的包裝名和產品列表。


Q:我在免安裝應用內為功能命名時,會不會受到限制?

A:功能模組遵循 Java 命名規則。例如,您不能在功能名稱中使用連字元。想要了解更多關於 Java 命名規則的內容,請參閱對應的 Java 文獻:

(https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html)



3. Google 分析、Google Play 與部署

640?wx_fmt=jpeg

Q:我能讓我的免安裝應用只在限定的幾個國家內釋出嗎?

A:免安裝應用的使用範圍限定於相應的可安裝應用所在的國家和地區。在這些國家和地區的範圍內,開發者可以選擇在特定地區內釋出自己的免安裝應用。


Q:如果我想要通過 Google Play 在釋出前測試我的免安裝應用,我還需要首先發布可安裝應用的 APK 嗎?

A:想要通過 Google Play 在開發階段測試您的免安裝應用的部署情況,您就必須在 Google Play Console 中擁有 “草稿” 形式的可安裝版本應用。

想要了解更多關於對您的免安裝應用的進行部署,以及對其部署情況進行測試的資訊,請參閱上面提到的 “釋出您的免安裝應用”。



4. 應用大小

640?wx_fmt=jpeg

Q:4MB 的總下載限制是什麼意思?

A:免安裝應用的大小(基本功能加上任何附帶的附加功能)應該越小越好。您的應用越小,使用者下載使用起來就越容易。但是,當您的免安裝應用已經執行在使用者的裝置上時,您就可以使用使用者的裝置來下載並儲存額外的資料。如果是用這種方式在使用者的裝置上使用資料,則不存在 4MB 的硬限制。

想要計算應用大小的話,只需解壓免安裝應用的 APK 並檢查 APK 檔案。您可以使用 APK 檔案的磁碟容量,或是開啟 APK Analyzer 並觀察 Raw File Size 值。

對於那些擁有多個功能的免安裝應用,您必須把基本功能 APK 的大小與單一功能 APK 合併計算。基本功能與單一功能 APK 檔案大小之和必須小於 4MB


Q:使用者每次下載同一個免安裝應用時都需要下載基本功能 APK 和附加功能 APK 嗎?

A:當使用者首次下載免安裝應用時,他們會下載基本功能和附加功能兩個 APK。當使用者請求其他功能的 APK 時,使用者只會收到與所請求功能的 APK。在這種情況下,基本功能 APK 不需要被重複下載。

* 注意:系統會在垃圾整理期間根據需要清理免安裝應用的快取。如果手機重啟,快取會清空。如果免安裝應用的快取被清空,使用者就必須重新下載基本功能的 APK。


Q:何時會觸發 4MB 驗證?

A:當您在製作階段將免安裝應用上傳到 Google Play Console 時就會觸發驗證。



5. 應用連結、深連結與 URL 處理

640?wx_fmt=jpeg

Q:使用者從一些應用點選連結時,連結並沒有開啟我的免安裝應用,而是在應用內瀏覽器中開啟了。有沒有辦法能保證使用者被帶到免安裝應用裡面去?

A:App Link 只是普通的 URL,所以應用可以強迫它們在應用內瀏覽器中開啟。請考慮使用 Firebase Dynamic Links 來包裝您的 URL,確保使用者在點選您的連結時總能被帶到您的免安裝應用裡去。


Q:我的主應用 manifest 裡包括其他 URL 和其他 URL 域名,但我並不擁有這些域名。這樣會產生什麼後果?

A:很遺憾,如果一個 URL 的域名所有權未經確認,則會導致免安裝應用釋出失敗。



6. 在裝置上執行免安裝應用

640?wx_fmt=png

Q:使用者能否放棄使用 Android Instant App?

A:能。使用者在首次啟動免安裝應用時可以選擇放棄。使用者還可以選擇開啟 Settings 並點選 Google > Instant Apps 進行設定。


Q:兩個免安裝應用可以同時執行嗎?

A:可以。免安裝應用可以同時執行,使用者可以在多個應用之間切換。只有位於前臺的免安裝應用會在通知欄內顯示圖示。


Q:使用者能否在 “最近使用” 欄和裝置主屏上結束和重啟免安裝應用的程式?

A:免安裝應用可以從 “最近使用” 欄重啟,使用者還可以點選之前執行過的啟動 URL 來重啟應用。

當使用者停止與免安裝應用互動時,免安裝應用的程式即被終止。但是,應用的內部儲存,如 SQLite DB 還有共享偏好會保留下來。如果裝置儲存空間告急,免安裝應用可能會被刪除,它的內部儲存也會一同被刪除。雖然這種情況不太可能出現,但當它出現的時候還想恢復使用者的使用狀態和偏好資訊的話,開發者需要從服務端解決。


Q:免安裝應用能不能啟動使用者裝置上安裝的其他應用?

A:免安裝應用可以通過發出隱式意圖 (implicit intent) 來啟動一個可安裝應用,但無法使用顯式意圖 (explicit intent) 來啟動大多數可安裝應用。但可安裝應用可選擇對那些發出顯式意圖的免安裝應用開放。


Q:如果使用者安裝了較舊版本的應用,並點選了與較新版本免安裝應用相關聯的 URL,會開啟哪個應用?

A:可安裝應用永遠優先於免安裝應用開啟。


Q:使用者如何接收我的免安裝應用的最新版本? Google 會不會在使用者的裝置上自動對它進行更新?

A:最新版本的免安裝應用將提供給新使用者使用,現有使用者的免安裝應用快取過期時,也會獲取最新版本的應用。


640?wx_fmt=jpeg

以上就是這一次的 FAQ 內容。想要打造良好的免安裝體驗,請點選 “閱讀原文” 進一步查閱我們的最佳案例。如果您手裡已經有安裝版本的應用,何不試試再進一步,讓您的應用無需安裝即可使用呢?



推薦閱讀:

掌握 Android O 行為變更指南,參與互動贏收藏版 Android 公仔!

萬眾矚目Instant Apps終於全面問世啦

Kotlin 語言入門寶典 | Android 開發者 FAQ Vol.5

馬上報名 | Google Play 下半年政策更新重點及線上問答

邀請函 | Google Play 成長之星 “Pizza Night” 北京站


640?wx_fmt=gif


相關文章