跨平台 APP(React Native、Flutter)開發完成後,上架是企業最容易低估的階段。技術團隊往往把 80% 注意力放在功能實作,卻把上架當成「打包送出就好」的最後一步。實務上,第一次送審的退件率超過 50%,每次退件平均拖延 3 ~ 7 天。對需要趕在活動或行銷檔期上架的企業來說,這是真正的風險。退件多半不是程式 Bug,而是政策、文案、隱私說明、權限描述等「非工程」問題,但這些問題往往要工程、法務、行銷三方一起才能解決。
App Store 採用人工審核為主,每個版本都會由 Apple 審核員實際操作 APP,2026 年的平均審核時間約 24 ~ 72 小時,新 APP 首次上架較慢,約 1 ~ 3 個工作天。Google Play 則以自動化審核為主,新 APP 首次審核約 1 ~ 7 天,後續更新通常數小時內完成。但 Google Play 自 2024 年起對「個人開發者帳號」要求 14 天封閉測試與 20 位測試者,企業帳號雖無此限制,但仍須備齊組織驗證資料。整體而言 App Store 審核更嚴格但更可預測,Google Play 規則寬鬆但偶爾觸發演算法下架,難以申訴。
最常見的退件代碼是 App Store 5.1.1(隱私)與 Google Play 的「資料安全性」表單不一致。Apple 要求每個 APP 在 App Store Connect 填寫「隱私營養標籤(Privacy Nutrition Label)」,逐項列出蒐集了哪些資料、用途為何、是否與第三方共享、是否可被識別到個人。Google Play 則要求「Data safety form」內容與實際蒐集行為一致。常見錯誤是:APP 內整合了 Firebase Analytics、Crashlytics、Facebook SDK,但隱私表單只勾了「不蒐集任何資料」。解決方法是上架前由開發、行銷、法務一起檢視 SDK 清單,逐項對應到隱私表單,並確認 APP 內的隱私政策連結可被正常開啟。
從 iOS 14.5 起,APP 在跨應用追蹤前必須先呼叫 ATT 權限請求視窗。Apple 的常見退件理由是:APP 整合了 Facebook SDK 或廣告 SDK 但「未呼叫 ATT 視窗」、或「ATT 視窗的文案僅 1 行、未說明用途」。實務做法是在使用者首次啟動或進入廣告相關功能時呼叫 requestTrackingAuthorization,info.plist 的 NSUserTrackingUsageDescription 須以使用者語言寫清楚「我們會用追蹤資料做什麼」。請避免「為了提供更好的體驗」這類空泛說法,改為具體說明:「協助我們衡量廣告成效並提供您更相關的內容推薦」。
App Store Guideline 4.8 規定:若 APP 提供任何第三方登入(Google、Facebook、LINE、微信),就必須同時提供「Sign in with Apple」作為其中一個選項,且不得放在不顯眼處。常見退件是「只提供 LINE 登入」、「Sign in with Apple 按鈕被隱藏在『其他登入方式』下方」。例外情形:若 APP 僅使用企業內部 SSO、教育機構帳號、政府帳號,可豁免。Google Play 則無此要求。跨平台 APP 通常選擇 react-native-apple-authentication 或 expo-apple-authentication 套件實作。
這是退件成本最高的一類。Apple Guideline 3.1.1 規定:APP 內銷售「數位內容、訂閱、虛擬商品」必須使用 Apple IAP,且不能在 APP 內引導使用者「外開瀏覽器去網站付款」。常見違規包括:APP 內顯示「請至官網訂閱可享 8 折」按鈕、APP 內可開啟 WebView 顯示信用卡付款表單。實體商品、外送、票券、行動支付(如 Apple Pay 在實體店面結帳)則不受此限。Google Play 同樣要求 Google Play Billing,但寬鬆度近年因反壟斷訴訟逐步開放。實務建議:跨平台 APP 在規劃階段就要決定哪些商品走 IAP、哪些走實體金流,避免上線後發現需要拆兩套架構。
iOS 的 info.plist 中,每個會請求權限的 API 都需對應一個 Purpose String,例如相機(NSCameraUsageDescription)、定位(NSLocationWhenInUseUsageDescription)、相簿、麥克風、藍牙等。常見退件理由是「The purpose string in your app's Info.plist file does not sufficiently explain why your app is requesting access」。請勿寫「需要相機權限」或「To use camera」這種等於沒寫的句子,改為「拍攝商品照片並上傳至訂單」、「掃描 QR Code 完成簽到」這種具體場景。Android 的執行階段權限(runtime permission)雖較寬鬆,但 Google Play 對位置權限(特別是「ACCESS_BACKGROUND_LOCATION」)有額外的政策聲明要求,需在後台填寫使用情境。
App Store 的年齡分級(4+、9+、12+、17+)、Google Play 的 IARC 年齡分級若與實際內容不符,可能被退件甚至下架。常見錯誤是社群型 APP 未正確標示「使用者生成內容」與「不受限的網頁瀏覽」,導致分級被自動拉高到 17+ 或被退件要求修改。針對兒童導向 APP,Apple 設有「Kids Category」獨立規範:禁止第三方分析、第三方廣告、需提供家長控制機制;Google Play Families 政策同樣嚴格。台灣企業若 APP 的目標用戶可能包含未成年,建議直接走「一般類別 + 適當年齡分級」較安全。
任何允許使用者上傳內容的 APP(社群、論壇、評論、聊天)都會觸發 App Store Guideline 1.2 與 Google Play UGC 政策,要求至少具備四項機制:使用者協議與內容規範、不當內容檢舉功能、封鎖使用者功能、24 小時內處理檢舉的流程。常見退件是「找不到檢舉按鈕」或「檢舉後無回饋」。實務做法是在每筆 UGC 旁加上「···」選單,提供「檢舉此內容」「封鎖此使用者」兩項,後台需有對應的審核流程記錄。AI 自動審核(如 OpenAI Moderation、Google Perspective API)可加速處理但不能取代人工複核。
審核員實際使用 APP 時,若主要功能無法操作、看到「Coming Soon」字樣、或測試帳號登入失敗,會直接退件並標註 Guideline 2.1(App Completeness)。請務必:在 App Store Connect 與 Google Play Console 的「審核備註」欄位提供測試帳號(含手機 OTP 接收方式或備援)、完整測試流程說明、若有特定地區限制要附上 VPN 設定建議。跨平台 APP 開發團隊建議在送審前 1 週做一次「審核員模擬測試」:用全新裝置、無痕模式、按照備註步驟逐步操作,確認每一個入口都能完成。
送審前請逐項勾選:一、隱私政策網址可開啟且為繁體中文;二、Privacy Nutrition Label / Data Safety 與實際 SDK 蒐集行為一致;三、ATT 文案具體、流程在主要功能前觸發;四、Sign in with Apple 已實作並與其他登入方式同等顯示;五、所有數位內容銷售走 IAP,無外連付款;六、info.plist 每個 Purpose String 寫具體使用情境;七、年齡分級已正確選擇;八、UGC 功能具備檢舉、封鎖、使用者規範;九、提供可登入的測試帳號與步驟;十、APP icon、啟動畫面、商店截圖符合各平台尺寸規範;十一、3rd party 登入(Google、Facebook、LINE)的 OAuth 重新導向 URL 已設定;十二、Crash 率低於 1%(建議用 Firebase Crashlytics 或 Sentry 監測)。
退件不可怕,可怕的是把上架當成最後階段才處理。較穩健的做法是:在需求訪談階段就決定金流走 IAP 還是實體商品、UGC 審核流程怎麼運作、目標年齡層為何;在 UI 設計階段就把 Sign in with Apple、權限請求視窗、隱私政策連結納入畫面;在開發階段定期做內部的審核員模擬測試。把上架當成「設計問題」而非「工程問題」,跨平台 APP 送審時就能減少來回修改,企業也能更穩健地把握行銷檔期。規劃企業 APP 時若希望避開審核地雷,可參考APP 上架送審的服務範圍。