從開發初期到現在,我的兒童任務管理平台一直以 PWA(Progressive Web App) 的形式存在。
PWA 的好處很明顯:只要一個網址,就能在大多數裝置上直接使用,甚至還能加到主畫面、支援離線快取,體驗上接近原生 App 。對於一個獨立開發的小專案來說,這樣的做法既省時又省力。
不過為了增加曝光度,也想試著上架 Google Play,我在開發之初已經問過 AI,PWA 是可以打包成 Android App 並上架的;另一方面,對於使用者來說,「商店下載」也比「加到桌面」更有信任感。
於是,我再次求助於 AI,詢問:PWA 打包成 Android App,上架到 Google Play 有那些方案?
AI 給了我幾個可行的方向,因為先前遇到過 webview 使用 Google 登入問題,我特別請 AI 針對 Google 登入 的相容性做了分析:
方案 | Google 登入可行性 | 實作方式 |
---|---|---|
TWA(Trusted Web Activity) | ✅ 完全可用 | 直接在 PWA 使用 Google Sign-In,就像網頁一樣 |
Cordova / Capacitor | ✅ 可用 | 需要原生 plugin(Google Sign-In SDK) |
Flutter + WebView | ✅ 可用 | 建議用原生 plugin,不要在 WebView 裡跑 OAuth |
單純 WebView 包裝 | ⚠️ 不建議 | Google 禁止隱藏式 WebView OAuth,審核容易失敗 |
看完這個比較表,我決定先選擇 TWA。理由有三個:
這個「保持網站更新即等於 App 更新」的特性,對個人開發者來說很有吸引力,不需要每次修改還要到多個地方上架或部署。於是,我就決定開工了。
我沒有寫過原生 Android,但 AI 給了很大的幫助。它直接在我的專案目錄下生成了一個 android-twa
資料夾,裡面就是完整的 Android 專案架構。只要照著指令,就能一步步產生出 APK / AAB 檔案。
在這過程中,我也學到了一些基本技巧:
.bat
腳本,只要手機開啟「USB 偵錯模式」,執行 bat 就能把 App 安裝到手機上並運行。chrome://inspect
直接查看 TWA 的 console log,方便除錯。這個流程讓我感覺自己像是「被 AI 帶著做 Android 開發」,過程雖然陌生,但在 AI 帶領下,進展還是非常快。
不過,當我第一次把 App 安裝到手機時,卻發現一個致命問題:
打開 App 以後,竟然直接跳轉到 Chrome 瀏覽器,根本沒有全螢幕體驗!
這時候 AI 提醒我,關鍵在於 Digital Asset Links(數位資產連結)。
簡單來說,Google 需要一個「證明」:這個網站確實是我擁有的,而不是某個惡意網站隨便打包成 App。
做法是:
.well-known/assetlinks.json
檔案。[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.taskyventure.app",
"sha256_cert_fingerprints": [
"12:34:56:78:90:AB:CD:EF:..."
]
}
}
]
我在網站加上這個檔案後,並等候一段時間,問題好不容易才解決。重新安裝 App 之後,它不再跳出 Chrome,而是以原生 App 的方式全螢幕執行。
Google 的快取需要一段時間才會過期並重新抓取最新的版本。這個時間沒有一個固定的數字,但根據開發者的經驗,通常需要幾個小時,甚至可能長達 24 小時。
不過使用上仍有一些體驗上的問題,像是啟動時仍會有短暫的網頁跳轉過程,以及會跳出正在 Chrome 中運行的提示,雖不影響主功能,但總是有一種不完善的感覺。在與 AI 多次討論後仍解決不了(或許是 TWA 的限制?),我暫時放棄了,先繼續進行下個階段。
除此之外還有一個有趣的問題:
TWA 有啟動動畫,PWA 也有啟動動畫,導致要看兩次不同的啟動動畫才能開啟...
透過 AI 的協助,我這個完全不懂 Android 的開發者,也成功把 PWA 打包成能夠上架到 Google Play 的 App。
回顧整個過程,我覺得最重要的心得有:
不過,目前我還有一個問題尚未解決:啟動時會短暫出現網頁跳轉的畫面,並且系統還會顯示「正在 Chrome 中運行」的提示訊息。雖然不影響主要功能,但多少會讓體驗打了點折扣。
即便如此,TWA 還是有很明顯的優勢:
接下來就要準備上架 Google Play 了。
敬請期待下一篇《AI 幫我上架 Google Play:從 PWA 到 TWA 的實驗(下集)》