“恢复购买”是什么意思?

最后更新 9 3 月, 2026
 
Victoria Kharlan
发布于 5 12 月, 2025 
最后更新 9 3 月, 2026
阅读需 2 分钟
What Does Restore Purchase Mean

设想一下:用户购买了订阅,更换了设备,重新安装了你的应用,然后突然失去了访问权限。这是失去用户信任的最快方式。

這正是「恢復購買」功能存在的意義。它看似可有可無的按鈕,實則不可或缺,尤其對訂閱制應用程式而言更是如此。

此選項讓使用者無需再次付費即可重新取得先前購買的內容。
這個小按鈕在建立信任、符合規範及提升用戶留存率方面扮演著關鍵角色。

为什么它很重要

  • 使用者信任:若使用者曾付費一次,便期望無論使用何種裝置,都能持續享有存取權限。
  • 支援負載:混亂或缺失的還原邏輯 = 憤怒用戶 + 更多工單。
  • 應用商店合規性:蘋果與谷歌均要求您為特定產品類型提供還原選項。

哪些购买可以被恢复

可恢復的購買項目包括

  • 非消耗品:一次性購買項目,例如終身使用權或高級功能。
  • 自動續訂訂閱服務:每月/每年方案,可跨裝置同步使用。
  • 非自動續訂訂閱:固定期限存取權限(例如:3個月通行證)。

無法恢復

  • 消耗品,例如硬幣、額外生命或一次性加速道具。這些物品的設計初衷就是供玩家消耗使用。

“恢复购买”按钮的工作原理

  1. 使用者介面/使用者體驗。新增一個「恢復購買」按鈕——通常位於設定選項中或直接顯示於付費牆上。
  2. 觸發器。點擊後,透過以下方式觸發還原:
    • SKPaymentQueue.restoreCompletedTransactions() 適用於 iOS
    • BillingClient.queryPurchaseHistoryAsync() 適用於 Android
    • 或您的後端邏輯(若您在伺服器端管理授權)
  3. 更新存取權限。還原完成後,請重新整理使用者的訂閱狀態並解鎖內容。
  4. 添加說明文字。簡單的提示可減少混淆:「若您已更換裝置或重新安裝應用程式,請使用此選項。」
  5. 避免重複。若使用者已具備存取權限,請停用按鈕或完全隱藏該按鈕。
  6. 帳戶邏輯。針對需登入的應用程式:將訂閱綁定至用戶帳戶,並透過後端同步以簡化跨裝置資料復原流程。

iOS 上的购买恢复机制

在 iOS 上,恢复购买会刷新应用收据,并重新交付与用户 Apple ID 关联的产品。该过程在后台静默运行,体验应当简洁明了。

以下是使用原生 StoreKit(StoreKit 2 之前版本)的实现方法:

1. 启动恢复流程

呼叫 restoreCompletedTransactions() 以觸發還原流程:

SKPaymentQueue.default().restoreCompletedTransactions()

这会指示 StoreKit 查找与当前 Apple ID 关联的所有历史购买记录。

2. 处理已恢复的交易

監聽付款佇列並檢查是否出現 .restored 交易狀態。接著解鎖內容並標記交易為完成:

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    for transaction in transactions {
        if transaction.transactionState == .restored {
            // Unlock access based on restored product
            unlockContent(transaction: transaction)
            SKPaymentQueue.default().finishTransaction(transaction)
        }
    }
}

請務必呼叫 finishTransaction(_:)。否則,StoreKit 可能會持續重試相同的交易。

3. 妥善处理失败情况

恢复可能因收据无效、网络问题或 Apple ID 没有符合条件的购买记录而失败。请向用户显示清晰的反馈信息,并记录错误日志以便调试。

正在使用 Adapty SDK?我們透過單一方法呼叫即可處理所有流程,包含收據驗證與邊際案例。

Android 上的购买恢复机制

在 Android 上,恢复购买意味着通过 Google Play 检查用户的购买历史记录,并重新激活任何非消耗型产品或有效订阅。Android 没有像 iOS 那样的内置”恢复”按钮,因此你需要通过 billing API 手动处理。

以下是使用 Google Play Billing Library 的实现方法:

1. 查詢購買記錄

使用 queryPurchaseHistoryAsync() 來擷取用戶的過往購買紀錄:

billingClient.queryPurchaseHistoryAsync(
    BillingClient.SkuType.SUBS
) { billingResult, purchaseHistoryList ->
    if (billingResult.responseCode == BillingClient.BillingResponseCode.OK && purchaseHistoryList != null) {
        for (purchase in purchaseHistoryList) {
            // Restore subscription access
            restoreEntitlement(purchase)
        }
    }
}

您亦可透過傳遞 BillingClient.SkuType.INAPP 來查詢應用程式內購買項目。

2. 验证并解锁

获取购买历史记录后,验证收据(最好在服务器端进行),并相应地授予访问权限。请务必验证签名数据以防止伪造。

Adapty 开箱即用地处理购买验证、用户访问逻辑和跨平台同步。

3. 用户体验注意事项

由于 Android 用户通常不会期望看到”恢复购买”按钮,你可以:

  • 登入或應用程式啟動時自動觸發還原
  • 或者在设置中提供一个不显眼的选项,以确保透明度

无论采用哪种方式,请确保恢复逻辑在后台静默运行,并在访问权限恢复后更新界面。

总结

“恢复购买”按钮看似简单,但它在订阅旅程中扮演着至关重要的角色。

  • 它能建立信任。
  • 它能降低流失率。
  • 它能确保你的合规性。

让它醒目可见,让它正常运作,让它简单易懂。

常见问题

若您的應用程式僅透過登入功能存取購買項目,技術上可能無需設置登入按鈕。但蘋果仍建議採用此設計,此舉有助於減少用戶支援請求。

不。它僅重新啟用有效的過往購買記錄;不會產生任何費用。

不,通常需要使用者手動觸發。但若使用 Adapty 或自建後端系統,可在應用程式啟動時靜默同步購買資料,確保存取權限始終保持最新狀態。

在 iOS 裝置上——是的,只要使用相同的 Apple ID。在 Android 裝置上,建議登入以將購買紀錄連結至永久性用戶帳戶。

不,”恢復購買”功能僅適用於最初進行購買的帳戶。

在 iOS 系統上,若產品支援「家庭共享」功能且該功能已啟用,任何家庭成員皆可還原購買項目。實際操作方式取決於 App Store 設定與產品類型。

顯示友善提示訊息,例如:「未找到您帳戶的過往購買紀錄。」此舉可避免混淆,並確認流程已如預期執行。
Victoria Kharlan
Lessons I wish I had. Now yours.
教程

在此页面上

准备好使用Adapty创建您的第一个付费墙了吗?
构建不需要编码的赚钱付费墙
免费开始