# 구매 복원

> 플레이어가 앱을 다시 설치하거나 디바이스를 전환할 때 이전에 소유한 제품 및 구독에 다시 액세스할 수 있습니다.

Restore purchases 기능을 사용하면 플레이어가 다시 지불하지 않고도 이전에 소유한 비소모품 제품과 활성 재생 가능 구독에 액세스할 수 있습니다. 앱 스토어는 이러한 권한에 대한 영구적인 기록을 유지하며, Unity IAP는 이러한 권한을 가져와 액세스 권한을 부여할 수 있습니다.

Apple 플랫폼에서 갱신되지 않는 구독은 복원할 수 없습니다. Apple에서 갱신되지 않는 구독을 사용하는 경우 자체 구독 기록을 유지하고 여러 기기에서 자격을 동기화해야 합니다.

## Google Play##google-play

* 재설치 후 Unity IAP는 첫 번째 `StoreController.FetchPurchases()` 호출 시 소유 제품을 복원합니다.
* IAP는 모든 구매(모든 상태)를 포함하는 `Orders` 객체를 사용하여 `OnPurchasesFetched` 리스너를 호출합니다.
* `PurchaseService.ProcessPendingOrdersOnPurchasesFetched` 설정을 true로 설정하면 IAP는 실행되지 않은 각 구매에 대해 `OnPurchasePending` 리스너를 호출합니다.
* 동일한 세션에서 후속 `FetchPurchases()` 호출은 개발자가 동일한 세션에서 이미 확인한 주문에 대한 `OnPurchasePending`를 트리거하지 않습니다.

## Apple 플랫폼##apple-platforms

* Restore Purchases 버튼을 제공해야 합니다(Apple에서 필수).
* 버튼은 트랜잭션을 재동기화하기 위해 Apple에서 트랜잭션 재동기화를 요청하는 `PurchaseService.RestoreTransactions`를 호출하며 사용자에게 인증을 표시할 수 있습니다.
* 재동기화 후 Unity IAP는 사용자의 모든 거래와 함께 `FetchPurchases`를 호출하고 `OnPurchasesFetched`를 호출합니다.

### 구매 복원(Apple 플랫폼)##restore-purchases-(apple-platforms)

```cs
void RestorePurchases()
    {
        UnityIAPServices.StoreController().RestoreTransactions((success, error) =>
        {
            if (success) {
                // This does not mean anything was restored,
                // merely that the restoration process succeeded.
            } else {
                // Restoration failed. `error`에는 실패 사유가 포함되어 있습니다.
            }
        });
    }
```
