---
title: "“恢复购买”是什么意思？"
description: "了解\"恢复购买\"的含义、它在 iOS 和 Android 上的工作原理，以及它对订阅类应用为何至关重要。"
url: "https://adapty.io/zh/blog/what-does-restore-purchase-mean/"
language: "zh"
slug: "what-does-restore-purchase-mean"
category: "build-integrate"
date: "2025-12-05T08:57:09.000Z"
date_modified: "2026-03-09T19:12:52.000Z"
author: "Victoria Kharlan"
---

# “恢复购买”是什么意思？

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

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

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

## 为什么它很重要

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

## 哪些购买可以被恢复

**可恢復的購買項目包括**：

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

**無法恢復**：

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

## "恢复购买"按钮的工作原理

1. **使用者介面/使用者體驗。** 新增一個**「恢復購買」** 按鈕——通常位於設定選項中或直接顯示於付費牆上。
2. **觸發器。** 點擊後，透過以下方式觸發還原：

- **SKPaymentQueue.restoreCompletedTransactions()** 適用於 iOS
- **BillingClient.queryPurchaseHistoryAsync()** 適用於 Android
- 或您的後端邏輯（若您在伺服器端管理授權）

3. **更新存取權限。** 還原完成後，請重新整理使用者的訂閱狀態並解鎖內容。
4. **添加說明文字。** 簡單的提示可減少混淆：*「若您已更換裝置或重新安裝應用程式，請使用此選項。」* *
5. 避免重複。若使用者已具備存取權限，請停用按鈕或完全隱藏該按鈕。
6. **帳戶邏輯。** 針對需登入的應用程式：將訂閱綁定至用戶帳戶，並透過後端同步以簡化跨裝置資料復原流程。

## iOS 上的购买恢复机制

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

以下是使用原生 StoreKit（StoreKit 2 之前版本）的实现方法：

### 1. 启动恢复流程

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

```swift
SKPaymentQueue.default().restoreCompletedTransactions()
```

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

### 2. 处理已恢复的交易

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

```swift
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()` 來擷取用戶的過往購買紀錄：

```swift
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 用户通常不会期望看到"恢复购买"按钮，你可以：

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

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

## 总结

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

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

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

## FAQ

### 如果我使用了登录功能，还需要显示"恢复购买"按钮吗？

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

### 恢复购买会触发退款吗？

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

### 我应该在每次应用启动时自动调用"恢复购买"吗？

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

### 恢复购买在未登录的情况下有效吗？

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

### 如果用户更换了 Apple ID 或 Google 账号，还能恢复购买吗？

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

### "恢复购买"如何与家庭共享配合使用？

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

### 如果"恢复购买"未找到任何购买记录会怎样？

顯示友善提示訊息，例如：「未找到您帳戶的過往購買紀錄。」此舉可避免混淆，並確認流程已如預期執行。
