所有文章
實戰指南閱讀時間 8 分鐘

Apple 的 DeviceCheck 能記住退款濫用者背後的那支手機,即使對方換了新帳號註冊

退款濫用者一旦建立新帳號,帳號停權和購買識別碼就會立刻失效。Apple 的 DeviceCheck 和 Google Play 的裝置記憶(device recall)會在商店伺服器上為每台裝置保留幾個位元。本文說明它們儲存什麼、何時設定,以及能為你省下多少錢。

一支二手智慧型手機螢幕朝下放在玻璃店面櫃檯上,上面繫著一枚黃銅吊牌,象徵 DeviceCheck 標記的是裝置而不是帳號

重點摘要

  • Apple 的 DeviceCheck 允許你的伺服器為每台裝置設定和查詢兩個二進位位元,資料儲存在 Apple 的伺服器上。Apple 明確將標記已確認有詐欺行為的裝置列為其預期用途之一。
  • Google Play 的裝置記憶(device recall)是 Play Integrity API 的一項 beta 功能,在 Google 的伺服器上為每台裝置儲存三個自訂位元,重新安裝應用程式和重設裝置後依然保留。
  • 同一 Google Play 開發人員帳戶下的所有應用程式共用裝置記憶的值,資料在最後一次讀取或寫入後保留 3 年。
  • Play Integrity 權杖在驗證後最多 14 天內可用於寫入裝置記憶位元,足以涵蓋 Google Play 48 小時的自助退款期限。
  • Apple 的退款通知和 Google 的作廢購買紀錄都不包含裝置識別碼,因此只有事先已將購買與自身帳號連結的伺服器才能標記裝置。
  • 裝置標記無法阻止退款。它決定的是你自己的應用程式接下來給這台裝置什麼,例如免費點數、由你出資的試用,或由你的伺服器簽署的促銷優惠。
  • 只有兩種退款流程允許開發者在商店做出決定前提交證據:Apple 的 CONSUMPTION_REQUEST,須在 12 小時內回覆;以及透過 orders.reviewrefund 進行的 Google Play 退單審查,須在 24 小時內回覆。

停權帳號擋不住在同一支手機上重新註冊的退款濫用者。Apple 的 DeviceCheck 和 Google Play 的裝置記憶(device recall)正是為了填補這個缺口而存在。兩者都允許你的伺服器為一台實體裝置附加幾個由你定義意義的位元,儲存在商店的伺服器上,因此當背後的人換了新電子郵件地址回來時,標記依然存在。這兩個工具都不會給你裝置 ID,也都無法阻止退款。它們的作用是在註冊或付費牆環節告訴你:這台裝置以前讓你吃過虧。

以下說明每個商店實際儲存什麼,決定你能否設定標記的時間陷阱,以及在你發現之前,一個反覆濫用退款的人會讓你付出多少代價。

為什麼新帳號能繞過所有帳號層級的防禦

大多數退款防禦都以帳號為鍵。Apple 的 appAccountToken 將交易與你資料庫中的使用者綁定。Google Play 的模糊化帳戶 ID 在 Android 上有同樣作用。兩者都應在每筆購買時設定,但它們描述的是一個人的帳號,而不是他手上的硬體。刪除帳號,用新的電子郵件註冊,你對這個人的紀錄就從零開始。

商店不會替你填補這個缺口。App Store 退款通知告訴你哪筆交易被退款。Google Play 作廢購買紀錄告訴你購買權杖、訂單 ID 和 voidedReason。它們都不包含裝置識別碼。一位交友應用程式開發者在 Apple Developer Forums 的討論串中描述了這種結果:詐騙個人檔案不斷購買進階會員,隨後又被退款,而用開發者自己的方法封鎖其裝置並沒有幫助。

新帳號會重設商店本身的試用嗎?

在同一個 Apple 帳號上不會。Apple 的文件說明,首次優惠(包括免費試用)只提供給尚未在該產品或同一訂閱群組內任何產品上享有過的顧客。因此在你的應用程式內換個登入,並不能再獲得一次 Apple 試用。換一個新的 Apple 帳號則可以,你自己發放的任何東西也一樣:註冊點數、伺服器出資的試用、推薦獎勵。這些正是裝置標記要保護的贈品。

Apple 的 DeviceCheck 實際儲存什麼

DeviceCheck 分為兩部分。在應用程式中,DCDevice 類別產生一個識別裝置的臨時權杖。在你的伺服器上,你把該權杖連同一個以開發人員帳戶金鑰簽署的 JSON Web Token 一起傳送給 Apple,Apple 便允許你查詢或更新該裝置的兩個位元。查詢回應會傳回 bit0、bit1 和 last_update_time,後者以年和月表示。Apple 自己舉出的範例用途是:已經領取過促銷優惠的裝置,以及你判定有詐欺行為的裝置。

位元由 Apple 保存,但意義由你定義。其文件說明,你負責記錄這些位元的意義並決定何時重設,並以裝置被出售為例。兩個位元可表示四種狀態,一個簡單的做法是:一個位元表示重度使用後退款,另一個表示已領取過免費點數。

  • 權杖只能使用一次。Apple 表示其有效期足以重試請求,但每次呼叫都應產生新的權杖。
  • 開發版本連線到 api.development.devicecheck.apple.com。正式環境必須使用 api.devicecheck.apple.com,否則你的標記會寫到錯誤的地方。
  • Apple 將 DeviceCheck 描述為整體風險評估的一項輸入,而非結論。請把已設定的位元視為需要進一步查核的理由。

Google 的裝置記憶在 Android 上補充了什麼

Google 的版本位於 Play Integrity API 中,目前仍處於 beta 階段,需透過意向表單申請。獲准並在 Play Console 中啟用後,每個完整性判定結果都會附帶該裝置的三個自訂位元。你透過伺服器呼叫 deviceRecall:write 端點寫入這些位元,使用的是你已驗證過的完整性權杖。Google 表示,這些資料在重新安裝應用程式和重設裝置後依然保留,因為它們儲存在 Google 的伺服器上。

Google 的文件對用途說得格外直接。它列出了有嚴重濫用證據的裝置、已兌換過高價值項目(如免費試用)的裝置,以及被反覆用來建立新帳號以進行濫用的裝置。對限制也同樣直接:裝置記憶只能用於保護應用程式安全以及打擊濫用、詐欺和未經授權的存取,絕不能用於對個別使用者進行指紋辨識或追蹤,也絕不能儲存年齡、性別或位置等敏感特徵。

問題Apple DeviceCheckGoogle Play 裝置記憶
狀態正式提供Beta,需透過意向表單獲准
每台裝置的位元數23
儲存位置Apple 的伺服器Google 的伺服器
重新安裝和重設後是否保留儲存在伺服器端,重設由你負責是,兩者皆保留(據 Google)
是否在你的應用程式間共用綁定到你的開發人員帳戶是,開發人員帳戶下的所有應用程式
時間戳記最後更新的年和月每個位元的寫入日期
保留期限直到你重設為止最後一次讀取或寫入後 3 年
寫入所需權杖全新的一次性 DCDevice 權杖已驗證的完整性權杖,可用 14 天
額外要求在你的帳戶下註冊的 App ID較新的 Play 商店和 Play 服務、經 Play 授權的使用者、不支援模擬器

時間問題:退款抵達時權杖已經失效

兩個工具在標記裝置之前都需要來自裝置本身的東西。Apple 需要一個全新的 DCDevice 權杖。Google 需要來自該裝置、不超過 14 天的完整性權杖。而退款是透過商店通知抵達你的伺服器,通知對裝置一無所知。所以問題不在於是否標記裝置,而在於退款抵達時,你是否還有辦法觸及這台裝置。

Google 的 48 小時退款落在 14 天期限之內

Google Play 的自助退款只在購買後 48 小時內可用,遠在完整性權杖可用於寫入的 14 天之內。在購買當下執行完整性檢查,把已驗證的權杖與訂單 ID 一起保存,當該訂單的作廢購買紀錄抵達時,你就可以立即寫入位元。退單是比較困難的情況,因為銀行爭議可能在第 14 天之後很久才到。

Apple 的退款需要裝置回來

Apple 的退款可能在購買數週後才抵達,而已保存的 DeviceCheck 權杖並不適合重複使用。實際的做法是先標記帳號,再標記裝置。退款通知抵達時,在你的資料庫中標記該帳號。下次該帳號開啟應用程式時,要求一個 DeviceCheck 權杖並設定位元。退款後仍保留內容的濫用者通常確實會回來,因為使用內容本來就是目的。

  • 購買時,透過 appAccountToken 或模糊化帳戶 ID 將交易記錄到你自己的帳號下。
  • 發生退款或作廢時,在你的伺服器上標記該帳號。
  • 被標記帳號下次工作階段時,取得裝置權杖並設定你的位元。
  • 每次註冊時,在發放任何需要你花錢的東西之前先查詢位元。

反覆濫用退款的人會讓你付出多少代價

退款金額只是看得見的部分。其餘的是這筆購買已經啟動的一切。如果你的應用程式需要花錢來交付所售內容,那麼每一輪購買、消費、退款都會讓這筆錢白白花掉:產生圖片的 GPU 時間、對模型或資料 API 的付費呼叫、顧客保留的匯出檔案的儲存空間,以及依銷售額計算的創作者分潤。新帳號會重新開啟這個循環,而你的帳本會把它記為一位全新顧客。

免費贈品同樣會流失,甚至根本不需要退款。一台裝置在十個帳號上收割註冊點數,消耗的運算資源是你為一次試用所編列預算的十倍。在 Google Play 上,2026年8月3日之後的訂單發生退單時,你還要承擔扣除 Google 服務費後的購買價格以及銀行手續費,因此每次都用新帳號提出爭議的人,每次都會讓你承擔完整的爭議成本。

成本項目沒有裝置標記有裝置標記
註冊點數或由你出資的試用每個新帳號都會再次發放對被標記裝置不發放或減少發放
運算資源和付費 API 呼叫每一輪都再次花費只花一次,之後受限
創作者或聯盟分潤對最終被退款的銷售照常支付對被標記裝置暫扣待審
2026年8月3日之後的 Google Play 退單每次都承擔扣除服務費後的價格及銀行手續費每次爭議相同,但重複爭議較少
商店的退款決定由商店決定仍由商店決定
維修工作室裡一抽屜相同的智慧型手機,其中一支貼著一條橘色膠帶,展示裝置標記如何在眾多手機中單獨標出一支

如何處理被標記的裝置

標記只回答一個問題:這台裝置是否應該再次免費獲得某樣東西?請保持應對適度,因為已設定的位元是證據,而不是定論。手機會被轉賣,家人會共用 iPad,Google 也正因如此明確建議你考慮忽略或重設舊資料。

  • 對被標記的裝置,略過註冊點數、伺服器出資的試用或推薦獎勵,改為提供付費方案。
  • 不要為被標記的裝置簽署促銷優惠。在 App Store 上,解鎖促銷優惠的簽章由你的伺服器產生,因此決定權在你。
  • 在被標記的裝置上交付昂貴的消耗性項目之前,先要求付款完成結清。
  • 善用時間戳記。上個月設定的標記比兩年前設定的更有份量。
  • 給使用者聯絡客服的管道。被誤標記的二手手機買家應該得到答覆,你也可以重設位元。

能直接封鎖裝置嗎?

你可以拒絕提供自己的免費附加項目,這正是裝置標記發揮價值的地方。強制封鎖風險較大。今天拿著這支手機的人未必是當初濫用的人,而且 Google 自己的條款將裝置記憶限定於防止濫用,而不是追蹤個人。限制會讓你花錢的東西,同時保持付費路徑暢通。

那 Keychain(鑰匙圈)或裝置識別碼呢?

開發者常問 Keychain 標記或硬體 ID 能否發揮同樣作用。應用程式儲存在手機上的標記在裝置重設後就會消失,而 Apple 不會為此向應用程式提供穩定的硬體識別碼。DeviceCheck 和裝置記憶是商店認可的解決方案,正是因為這些位元儲存在 Apple 和 Google 的伺服器上,而不是手機上。

哪些仍由商店決定

裝置標記改變的是你的應用程式接下來送出什麼。它們不會影響眼前的這筆退款。只有兩種退款流程允許你在商店做出決定前提交證據。Apple 傳送 CONSUMPTION_REQUEST,要求在 12 小時內提供消費資料。Google Play 開啟退單審查,你需要在 24 小時內透過 orders.reviewrefund 回覆。其他一切,從 Google Play 的 48 小時退款到客服退款,再到未確認購買的自動退款,都在沒有你參與的情況下決定。銀行一旦裁決,退單即為最終結果。

RefundHalt 會在期限內以你的真實使用資料回覆每一個 CONSUMPTION_REQUEST 和 Google Play 退單審查,並將每筆退款追溯到發起退款的帳號,這樣你的伺服器在下次檢查時就知道該標記哪台裝置。

常見問題解答

Apple 的 DeviceCheck 有什麼用途?
DeviceCheck 允許你的伺服器在 Apple 的伺服器上為每台裝置儲存和讀取兩個位元。Apple 自己的範例是標記已經領取過促銷優惠的裝置,以及標記你判定有詐欺行為的裝置。位元的意義以及何時重設都由你決定。
使用者刪除應用程式或建立新帳號後,DeviceCheck 還有效嗎?
有效。位元屬於裝置,儲存在 Apple 的伺服器上,而不在你的應用程式或使用者帳號中,因此重新安裝應用程式後,同一裝置上的新註冊會讀到相同的位元。重設由你負責,例如裝置被出售時。
Android 上有類似 DeviceCheck 的功能嗎?
有,就是 Play Integrity API 中的裝置記憶(device recall)。它在 Google 的伺服器上為每台裝置儲存三個自訂位元,重新安裝應用程式和重設裝置後依然保留,在你開發人員帳戶下的所有應用程式間共用,資料在最後一次存取後保留 3 年。此功能處於 beta 階段,需要獲准。
裝置標記能阻止顧客獲得退款嗎?
不能。退款由 Apple 和 Google 自行決定。裝置標記只控制你自己的應用程式接下來提供什麼,例如免費點數或促銷優惠。你的證據只在 Apple 的 CONSUMPTION_REQUEST(須在 12 小時內回覆)和 Google Play 的退單審查(須在 24 小時內回覆)中發揮作用。
因退款濫用而封鎖裝置是否被允許?
Google 只允許將裝置記憶用於應用程式安全以及防止濫用、詐欺和未經授權的存取,禁止用它對使用者進行指紋辨識或追蹤。由於裝置會被轉賣和共用,較穩妥的做法是對被標記的裝置不提供免費附加項目,而不是禁止其使用付費功能。

資料來源與延伸閱讀

RefundHalt

App Store 與 Google Play 的退款自動駕駛

繼續閱讀

下一筆退款申請已經在路上。

讀完另一封關於未能抗辯退款的客服郵件所需的時間,就足夠您設定好 RefundHalt。