Flutter App 上架 Google Play 商店完整教學

上一篇分享了 Apple App Store 的上架流程,這次來聊聊 Google Play。相較之下,Google Play 的流程直覺很多,不過第一次上架還是有一些眉角要注意。這篇把完整的流程和我個人的經驗心得整理出來。

註冊 Google Play Developer 帳號

首先到 Google Play Console 註冊開發者帳號。需要支付一次性的 USD $25 註冊費(大約台幣八百元),比蘋果每年 $99 便宜不少。

註冊過程中需要填寫:

  • 開發者名稱(會顯示在 Play 商店上)
  • 聯絡資訊(電子郵件、電話)
  • 開發者地址

近幾年 Google 加強了身份驗證的要求,個人帳號需要提供身份證明文件。在台灣的話,準備好護照或身分證就可以了。驗證通常需要幾個工作天。

建立 App 與商店資訊

建立應用程式

在 Google Play Console 點「建立應用程式」,選擇:

  • 預設語言(我通常選「繁體中文」)
  • App 名稱
  • App 類型(應用程式或遊戲)
  • 是否免費(注意:一旦設為免費就不能改成付費)

商店資訊

商店資訊是使用者在 Play 商店看到的內容,要好好寫:

  • 簡短說明:最多 80 個字,出現在搜尋結果中
  • 完整說明:最多 4000 個字,詳細介紹 App 功能
  • 螢幕截圖:至少 2 張,建議準備 5 到 8 張,每張 16:9 或 9:16
  • 高解析度圖示:512 x 512 px 的 App Icon
  • 精選圖片:1024 x 500 px,會出現在 Play 商店的 App 頁面頂部

螢幕截圖我建議加上一些文字說明和好看的背景,不要只是單純的 App 畫面截圖。可以用 Figma 或 Canva 來設計,效果會好很多。

內容分級

Google Play 使用 IARC(國際年齡分級聯盟)問卷來決定分級。你需要回答一系列關於暴力、色情、博弈等內容的問題。如實回答就好,系統會自動幫你分配適當的分級。

隱私政策

從 2024 年開始,所有 App 都必須提供隱私政策 URL。確保你的隱私政策頁面是公開可存取的,而且內容要涵蓋你的 App 實際收集和使用的資料。

簽署設定

上傳金鑰 vs Google Play 應用程式簽署

Google 推薦使用 Play App Signing,讓 Google 管理你的正式簽署金鑰。你只需要用「上傳金鑰」來簽署上傳的 App Bundle,Google 會在發布時自動替換成正式金鑰。

產生上傳金鑰

如果你還沒有上傳金鑰,用以下指令產生:

keytool -genkey -v -keystore upload-keystore.jks \
  -keyalg RSA -keysize 2048 -validity 10000 \
  -alias upload

系統會要求你設定密碼和填寫一些資訊。這個 .jks 檔案很重要,要妥善保管,千萬不要上傳到 Git。

設定 Gradle 簽署

android/ 目錄下建立 key.properties 檔案(記得加到 .gitignore):

storePassword=你的密碼
keyPassword=你的密碼
keyAlias=upload
storeFile=../upload-keystore.jks

然後修改 android/app/build.gradle

def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

android {
    // ...
    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
            storePassword keystoreProperties['storePassword']
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

打包與上傳

建置 App Bundle

Google Play 現在要求上傳 Android App Bundle(.aab),不再接受 APK:

flutter build appbundle --release

產出的檔案在 build/app/outputs/bundle/release/app-release.aab

上傳到 Play Console

在 Play Console 的「正式版」(Production)中建立新版本,上傳 .aab 檔案。你也可以先用「內部測試」(Internal Testing)或「封閉測試」(Closed Testing)來測試。

我建議第一次上架先用「內部測試」跑一輪,確認一切正常後再推到正式版。內部測試最多可以加 100 個測試人員,而且幾乎不需要審查等待時間。

版本管理策略

版本號設定

pubspec.yaml 中:

version: 1.0.0+1

每次上傳新版本,build number(+1 的部分)一定要遞增。我的習慣是正式版用 1, 2, 3...,如果同時有測試版本就用更大的數字區隔。

階段性發布

Google Play 支援階段性發布(Staged Rollout),可以先讓一小部分使用者更新,確認沒問題後再全面推送。我通常會設定先推送給 10% 的使用者,觀察個幾天沒有大量 crash 報告後再推到 100%。

資料安全性聲明

Google Play 要求填寫「資料安全性」(Data Safety)聲明,說明你的 App 收集了哪些使用者資料,以及這些資料的用途。

常見要聲明的項目包括:

  • 裝置識別碼:如果你用了 AdMob,它會收集 Advertising ID
  • Crash 日誌:如果用了 Firebase Crashlytics
  • 效能資料:如果用了 Firebase Analytics

這個部分要如實填寫,Google 會抽查。如果發現實際行為和聲明不符,可能會被下架。

審查與上架

審查時間

Google Play 的審查通常比 App Store 快,大部分情況在幾小時到一天內就會完成。不過新開發者帳號的第一個 App 可能會花比較長的時間,我第一次大約等了兩天。

常見退件原因

  • 隱私政策缺失或無法存取:確認 URL 可以正常打開
  • 不符合目標 API 等級要求:Google Play 有最低 targetSdkVersion 的要求,目前是 API 34
  • 權限使用不當:申請了不必要的權限但沒有合理說明
  • 廣告相關政策違規:特別是兒童應用的廣告限制

上架後的優化

App 上架後,可以在 Play Console 看到各種數據:

  • 安裝量與解除安裝量:了解使用者的留存情況
  • 評分與評論:及時回覆使用者的反饋
  • Android Vitals:監控 crash 率和 ANR 率
  • 商店資訊實驗:可以 A/B 測試不同的圖示、截圖和描述文字

結語

Google Play 的上架流程整體來說比 App Store 友善,費用也低很多。對於剛入門的獨立開發者,我建議可以先從 Google Play 開始,累積一些經驗後再挑戰 App Store。

最重要的幾件事:保管好你的簽署金鑰、認真填寫商店資訊、確保隱私政策可存取。做好這幾點,上架過程基本上會很順利。

如果你的 App 有投放廣告,記得也要設定好 app-ads.txt,這部分我在 AdMob 整合的文章有詳細說明。祝大家上架順利!