백엔드 서버의 Play 결제 구성요소

Android 앱 또는 프로그레시브 웹 앱에 Play 결제를 구현하여 사용자가 디지털 상품을 구매할 수 있습니다. 이제 백엔드 서버에 몇 가지 주요 Play 결제 구성요소를 구현할 차례입니다.

Google Play Developer API

Google Play Developer API에는 Subscriptions and In-app Purchases APIPublishing API라는 두 가지 구성요소가 있습니다. Subscriptions and In-app Purchases API는 제품과 구매를 관리하는 데 도움이 되는 다음 REST 리소스로 구성됩니다.

Google Play Developer API를 REST API로 직접 사용할 수도 있고 클라이언트 라이브러리를 사용하여 빠르게 개발을 시작할 수도 있습니다. 지원되는 모든 언어의 클라이언트 라이브러리는 여기에서 확인할 수 있습니다. Google Play Developer API의 시작 가이드에 따라 API 프로젝트를 연결하고 API 액세스 클라이언트를 설정합니다.

모든 인앱 상품 나열

프런트엔드 (Android 앱 또는 프로그레시브 웹 앱)에서 사용 가능한 제품 세부정보를 쿼리할 때는 제품 ID 목록을 지정해야 합니다. Play Console에서 만든 모든 인앱 상품과 정기 결제를 나열하는 Play Developer API inappproducts.list 메서드를 사용하여 백엔드 서버에서 이를 구현할 수 있습니다. 각 제품의 status를 확인하고 active 제품만 앱 클라이언트에 전송해야 합니다.

자격을 부여하기 전에 구매 확인

Android 앱 또는 프로그레시브 웹 앱에서 Play 결제를 구현할 때 중요한 부분은 사용자에게 자격을 부여하기 전에 구매를 확인하는 것입니다. 사용자에게 사용 권한을 부여하면 사용자가 구매한 상품과 연결된 혜택이나 콘텐츠에 대한 액세스 권한이 제공됩니다. 민감한 데이터를 처리해야 하므로 백엔드 서버에서 처리해야 합니다.

Google Play Developer API는 purchases.products:getpurchases.subscriptions:get 메서드를 제공합니다. 인앱에서 가져오거나 백엔드 서버에 저장된 구매 토큰과 함께 사용하여 구매가 합법적인지 확인합니다. 추가 구매 및 사용자 권한 확인을 위해 백엔드 서버에서 구매 토큰을 추적해야 합니다. 취해야 하는 단계에 관한 자세한 내용은 Google Play 결제 문서에서 구매 확인을 참고하세요.

인앱 구매

클라이언트로부터 구매 토큰을 받은 후 백엔드에서 Google Play Developer API를 호출하여 이미 소비되지 않았는지 확인해야 합니다. 유효한 구매의 purchaseState 필드는 1입니다.

구매가 유효한 경우 클라이언트는 서버로부터 응답을 받은 후 구매를 확인하고 사용 권한을 부여해야 합니다.

정기 결제 구매

인앱 구매를 확인하는 것과 마찬가지로 백엔드 서버는 클라이언트로부터 구매 토큰을 수신한 후 Google Play Developer API를 호출하여 정기 결제가 여전히 유효한지 확인해야 합니다.

정기 결제의 expiryTimeMillis 필드가 현재 시간보다 큰 경우 클라이언트가 권한을 부여해야 합니다.

이때 linkedPurchaseToken 필드를 확인하고 업그레이드, 다운그레이드, 기타 정기 결제 흐름을 처리하도록 정기 결제 데이터베이스를 적절하게 업데이트하는 것이 좋습니다. 이 페이지의 나머지 부분에서는 자세히 설명합니다.

백엔드 상태를 업데이트된 상태로 유지

앱이 다양한 플랫폼에서 제공되는 경우 (다양한 결제 수단을 사용할 수도 있음) 백엔드 서버에서 사용자와 구매를 추적하면 사용자가 앱을 사용하는 기기와 플랫폼에서 동일한 권한에 액세스할 수 있습니다.

사용자와 현재 권한을 기록하는 데이터베이스를 사용하는 것만큼 간단할 수 있습니다. 그런 다음 사용자가 구매하거나 권한을 소비하면 이에 따라 업데이트합니다. 다음에 다른 플랫폼에서 앱에 액세스할 때 백엔드에서 적절한 권한을 가져와 사용자가 액세스할 수 있도록 합니다.

정기 결제 상태 변경 처리

정기 결제는 수명 주기 동안 다양한 상태 변경을 거칠 수 있으며 각 상태에 적절하게 응답해야 합니다. 정기 결제 수명 주기 처리에 대해 자세히 알아보고 백엔드를 항상 최신 상태로 유지하세요.

구독 linkedPurchaseToken

정기 결제 문서에 설명된 대로 모든 새 Google Play 구매 흐름 (초기 구매, 업그레이드 또는 다운그레이드)은 새 구매 토큰을 생성합니다. linkedPurchaseToken 필드를 사용하면 여러 구매 토큰이 동일한 정기 결제에 속하는 경우를 인식할 수 있습니다.

정기 결제를 확인할 때마다 백엔드에서 linkedPurchaseToken 필드가 설정되어 있는지 확인해야 합니다. 이전 토큰이 있는 경우 해당 필드의 값은 이제 대체된 이전 토큰을 나타냅니다. 사용자가 콘텐츠에 액세스하는 데 이전 토큰을 사용할 수 없도록 이전 토큰을 즉시 무효로 표시해야 합니다.

예를 들어 백엔드에서 초기 구매의 구매 토큰 A를 빈 linkedPurchaseToken 필드와 함께 수신하면 해당 토큰의 사용 권한이 사용 설정됩니다. 나중에 백엔드에서 업그레이드 후 새 구매 토큰 B를 수신하면 linkedPurchaseToken 필드를 확인하고 A로 설정되어 있음을 확인한 후 구매 토큰 A의 사용 권한을 사용 중지합니다.

정기 결제 업그레이드 중에 연결된 구매 토큰을 처리하는 방법

linkedPurchaseToken 구현에 관한 자세한 내용은 중복 정기 결제를 방지하기 위해 linkedPurchaseToken 를 올바르게 구현을 참고하세요.

실시간 개발자 알림

Google Play Developer API의 purchases.subscriptions:get 메서드는 사용자 정기 결제를 관리하는 데 있어 신뢰할 수 있는 소스입니다. 보안 백엔드 서버에서 구독자 상태를 관리하는 경우 Google 서버와 상태를 동기화해야 합니다. 하지만 Google Play Developer API를 자주 폴링하면 API 할당량 제한에 도달하고 정기 결제 취소 또는 업그레이드와 같은 중요한 사용자 작업에 대한 알림 수신이 지연될 수 있습니다.

실시간 개발자 알림 (RTDN)은 구독자 자격 상태가 변경 (예: 정기 결제 구매됨, 정기 결제 취소됨, 정기 결제 보류됨)되면 서버에 인스턴트 알림을 보내는 Google Play 결제 기능입니다. RTDN을 사용하면 Google Play Developer API를 정기적으로 폴링하는 대신 이러한 알림에 응답하는 것만으로도 구독자 데이터베이스를 동기화할 수 있습니다.

백엔드 서버는 갱신 및 취소와 같이 정기 결제 상태에 영향을 주는 이벤트에 대해 SubscriptionNotification을 수신합니다. 그런 다음 알림의 구매 토큰을 사용하여 Google Play Developer API를 호출하여 전체 상태를 가져오고 자체 백엔드 상태를 업데이트합니다.

이 안내에 따라 앱에 대해 RTDN을 구성할 수 있습니다. 그런 다음 이러한 메시지를 사용하도록 백엔드 서버를 설정해야 합니다.

자세한 내용은 전체 RTDN 참조를 확인하세요.