優惠碼流程看似已完成,但本地購買測試通過後,Sandbox 裡的兌換結果仍然無法確認。 最快的判斷方式:用 Xcode 的 StoreKit Testing 驗證購買與權益邏輯,再用 App Store Connect 建立的 Sandbox 優惠碼及 Sandbox Apple Account 驗收實際兌換;本地通過不代表 Sandbox 兌換成功。
正在為自動續期訂閱增加優惠碼入口的獨立開發者,可用本文區分本地邏輯測試與實際兌換驗收。
已建立優惠活動、準備測 Sandbox 兌換的開發者,可依照職責整理操作與證據。
維護訂閱交易及權益服務的小團隊,則可核對 App 與伺服器端的處理結果是否一致。
先依測試目的判斷 StoreKit 優惠碼測試範圍
本地 StoreKit Testing 適合快速檢查商品呈現、購買流程及 App 收到交易後如何處理權益;實際優惠碼是否能在 Sandbox 兌換,則必須在 Sandbox 流程中驗證。兩者不能互相代替,因為本地配置不會證明特定優惠碼已建立、可兌換,或已由 App Store 的測試流程接受。
| 測試選項 | 適合驗證 | 不能據此判定 |
|---|---|---|
| Xcode 的 StoreKit Testing | 商品與購買介面、交易處理、權益開通及復原邏輯 | App Store Connect 建立的優惠碼可否兌換 |
| Sandbox 優惠碼與 Sandbox Apple Account | 優惠碼兌換流程、測試交易及 App 對交易的處理 | 正式顧客優惠碼已上線或正式環境行為完全無誤 |
| App 內兌換入口 | App 是否能呈現兌換介面,以及兌換後能否接續處理交易 | 僅憑畫面顯示成功就證明伺服器權益已更新 |
StoreKit 優惠碼可以用 Xcode 本地配置測試嗎?
可以用本地配置檢查購買與權益處理邏輯,但這不等同於兌換 App Store Connect 建立的 Sandbox 優惠碼。Xcode 可將 StoreKit configuration 指派給專案的執行方案,讓測試使用本地商品與購買狀態;設定方式可參照 Apple 的 Xcode StoreKit Testing 說明。驗收紀錄應標明測試環境,避免把本地交易寫成 Sandbox 兌換證據。
負責購買邏輯的開發者:先驗證本地交易與權益
在本地測試中,先確認 App 使用的商品識別碼與 StoreKit configuration 相符,再執行購買流程,觀察交易交付後的畫面與權益狀態。測試重點不是只看購買按鈕是否有反應,而是交易結果能否進入 App 既有的訂閱處理流程。
若使用交易監聽或交易驗證邏輯,應確認 App 能辨識交易所屬商品、更新使用者權益,並在必要時處理交易撤銷或過期狀態。Apple 的 Transaction 參考文件列出交易物件可供 App 讀取的資料,例如 productID、transactionID 與 originalID;這些欄位可協助開發者把商品、單次交易與原始訂閱關聯起來。
本地驗收適合先排除商品 ID 錯誤、權益映射失效、畫面未更新等問題。若這些基本邏輯仍有缺陷,直接進入 Sandbox 測試會讓「兌換失敗」與「App 沒有正確處理交易」難以區分。
負責後台設定的開發者:分清測試碼與正式優惠碼
Sandbox 兌換前,先核對 App Store Connect 中的訂閱商品、優惠活動與測試目標是否一致。建立優惠碼時應明確區分供測試使用的碼與正式行銷用途的碼,並以不同標籤和保管方式記錄;不要把測試憑據放進顧客宣傳素材、公開文件或正式活動流程。
Sandbox 優惠碼要在哪裡建立和兌換?
優惠碼及訂閱優惠活動應依照 App Store Connect 的設定流程建立,再使用 Sandbox 測試流程驗證。可參照 Apple 的訂閱優惠碼設定文件核對後台操作;Sandbox 測試帳號則依照建立 Sandbox Apple Account 的官方說明準備。不要將正式顧客使用的優惠碼當成 Sandbox 測試憑據,也不要因為後台已建立活動,就推定裝置端兌換已成功。
| 後台或帳號項目 | 開始測試前核對 | 常見誤判 |
|---|---|---|
| 訂閱商品 | App 使用的商品與後台測試目標一致 | 商品存在就代表優惠活動已可測 |
| 優惠活動與代碼 | 測試用途、代碼來源及活動設定已確認 | 建立完成就代表代碼已在裝置兌換 |
| Sandbox Apple Account | 測試使用的帳號與測試流程相符 | 登入帳號就代表當前兌換必定使用 Sandbox |
| 測試紀錄 | 記下環境、代碼用途與操作入口 | 只留「成功」截圖,沒有交易或權益證據 |
負責裝置兌換的開發者:分開檢查系統入口與 App 內入口
先從系統提供的兌換入口執行測試,記錄裝置上使用的帳號環境、輸入的測試碼、提交後的系統回應,以及 App 最後顯示的訂閱狀態。Apple 對應的使用 Sandbox 測試 App 內購買說明可作為裝置端測試依據;若測試的是 App 外完成的購買,也應參照App 外購買測試文件核對應有的處理方式。
「代碼已提交」、「系統顯示兌換完成」與「App 已正確開通權益」是不同結果,測試紀錄應分開保存。若 App 有提供輸入優惠碼或開啟兌換介面的功能,也要獨立測該入口,不要用系統兌換入口的成功結果代替。App 內優惠碼支援需有相應的 StoreKit 流程,可對照 Apple 的 App 內優惠碼支援文件。
如何測試 App 內輸入優惠碼的兌換流程?
先確認 App 已實作 Apple 文件所述的優惠碼支援,再從 App 內入口啟動兌換,觀察介面是否正確呈現;完成兌換後,仍須檢查交易是否進入 App 的處理邏輯,以及訂閱權益是否更新。若 App 尚未實作相應能力,不能只靠本地 StoreKit Testing 就宣稱 App 內兌換已驗收。
負責訂閱服務的小團隊:用交易與權益狀態交叉驗證
裝置端畫面只能提供其中一部分證據。App 端應確認交易商品與使用者權益對應正確;若服務端負責訂閱狀態,還要核對服務端接收的交易資料及權益結果,避免 App 顯示已解鎖、伺服器卻仍標記未訂閱,或反過來發生狀態不同步。
優惠碼兌換成功後,如何確認訂閱權益已開通?
至少要把兌換後的交易證據、App 顯示的權益狀態,以及服務端保存的訂閱狀態互相比對。若專案使用 App Store Server Notifications,測試事件應與正式環境資料分開記錄;Apple 的通知設定文件可用來核對伺服器通知的設定方向。單一成功畫面不足以證明交易已完整傳遞並完成權益處理。
| 驗收證據 | 通過時應看到的結果 | 未通過或需補測的情況 |
|---|---|---|
| 兌換入口紀錄 | 可辨識由系統入口或 App 內入口開始 | 只有「已兌換」文字,無法確認使用哪個入口 |
| 交易資料 | 商品及交易資料能對應此次測試 | 找不到交易,或商品與預期不符 |
| App 權益 | App 顯示的訂閱權益與交易相符 | 交易已收到,但畫面未更新或權益錯誤 |
| 服務端狀態 | 測試環境資料與 App 端結果相符 | 通知未處理、資料未更新,或混入正式紀錄 |
發布負責人:按職責整理可勾選的驗收清單
以下清單應由負責相應環節的人員提供證據。任何一項沒有證據,都應標記為未完成或需補測,而不是用其他環境的成功結果代替。
- [ ] 購買邏輯負責人:StoreKit configuration 與 App 商品設定一致;本地購買後的交易處理和權益狀態已核對。
- [ ] App Store Connect 負責人:訂閱商品、優惠活動及 Sandbox 測試碼用途已確認,測試碼沒有混入正式顧客活動。
- [ ] 裝置測試負責人:已記錄 Sandbox Apple Account、系統兌換入口或 App 內入口,以及提交後的系統回應。
- [ ] 訂閱服務負責人:交易資料、App 權益與服務端訂閱狀態互相吻合;Sandbox 事件沒有被當成正式環境紀錄。
- [ ] 發布負責人:將本地測試與 Sandbox 實際兌換分別標示,並保留入口、交易及權益證據。
若只有本地 StoreKit Testing 成功,應判定為「本地購買邏輯通過,Sandbox 優惠碼待驗收」;若兌換已提交但交易或權益資料缺失,應判定為「需補測」;只有優惠碼兌換、App 交易處理及預期權益都有相應證據,才適合將整段功能標記為通過。
需要遠端 Mac 的團隊:確認它能完成哪一段工作
沒有本地 Mac 時,遠端 Mac 可用於開啟 Xcode 專案、執行本地 StoreKit Testing 與準備建構工作;但遠端建構成功本身不能證明 Sandbox 優惠碼已在實際測試流程中兌換,也不能代替裝置端檢查或服務端權益驗收。測試人員仍須安排合適的 Sandbox Apple Account、兌換裝置與測試會話,並確認交易證據能回到負責人手上。
是否租用遠端 Mac,應按測試環境和使用頻率決定。自備 Mac 適合長期高頻開發,並且需要本機裝置與周邊整合的團隊;臨時租用則可避免為短期建構或 Xcode 測試先承擔硬體購置、閒置與維護成本,但仍受網路連線和實際兌換裝置安排影響。需要評估遠端環境時,可先查看 RUVCLOUD 的方案與計費資訊,再判斷是否符合專案的測試週期;若已決定使用,也可由 RUVCLOUD 的訂購頁面了解後續安排。
對只需短期執行 Xcode 專案、手邊沒有可用 Mac 的開發者,租用 Mac 可省去先購買一台專用機器、承擔閒置及自行維護的負擔;但若測試必須長期依賴固定實體裝置或持續重載運作,自購設備可能更合適。無論採用哪種環境,RUVCLOUD 遠端 Mac 都只負責可在該環境完成的建構與測試工作,不會取代 Sandbox 帳號、實際兌換或交易與權益驗收。