자동 갱신 구독 (Auto-renewable Subscriptions)

Hive SDK v1.18.4부터 제공하는 자동 갱신 구독은 정기적으로 결제를 반복하는 상품입니다. 일반적인 형태는 월간 구독, 연간 구독 또는 무료 체험 기간 설정 등 입니다. Google과 Apple에서 제공하는 구독 상품의 형태가 궁금하시다면 아래 표를 확인해보세요. 유저는 사용하는 OS에서 정기 결제 기간을 선택한 후 자동 갱신 구독 상품을 이용할 수 있습니다.

마켓 Google Apple Amazon Huawei
상품 형태 주간
월간
3개월
6개월
연간
주간
월간
2개월
3개월
6개월
연간
주간
월간
주간
월간

유저가 특정 상품을 구독 결제하는 상태라면 기기 종류에 상관 없이 어디서든 자동 갱신 구독에 접근할 수 있어야 합니다. 사용자의 필요에 따라 구독 상태 복구 역시 가능해야 합니다.

상품 등급 변경
자동 갱신 구독 상품은 높은 등급이나 낮은 등급으로 상품 변경이 자유롭습니다. 구독 상품은 소모되지 않으며, 복구를 시도할 때는 항상 영수증을 제공합니다.

Google에서는 구독 상품을 다른 등급으로 업그레이드나 다운그레이드, 또는 이전의 구독 상품과 관계 없이 새로운 구독 상품으로 변경할 수 있습니다. 이 때 이전 구독 상품의 잔여 기간 가치를 새로운 구독 상품의 만료 기간에 일할 계산해 부여합니다.

Apple은 iTunes 콘솔에 구독형 상품의 그룹을 정의하고 있으며, 이를 기준으로 동일한 구독 그룹 내 하나의 상품을 유지하는 범위에서 변경을 허용합니다. 상품을 업그레이드하면 새로운 구독 상품의 만료 기간에 이전 구독 상품의 잔여 기간 가치만큼 일할 계산해 부여하고, 다운그레이드할 때는 이전 구독 상품의 기간이 만료된 후 새 상품으로 변경한 구독을 갱신합니다.
 

 

구독형 상품

구매

  • 무료 체험
    구독 시작 시점에 무료 체험 기간이 있다면 결제하더라도 매출로 산정되지 않습니다. 무료 체험 기간이 끝나면 자동으로 결제됩니다.
  • 최초 구독 할인
    최초로 구독 상품을 이용할 때 진행하는 프로모션 형태입니다. 기존 구독 상품과 다르게 설정된 기간에 할인된 가격을 제공할 수 있습니다.

취소

유저는 구독을 갱신하기 전에 취소할 수 있습니다. 각 스토어의 구독 관리 메뉴에서 취소 방법을 확인할 수 있으며, 구독을 취소하면 자동 갱신이 종료됩니다.

환불

구독 취소 후 잔여 구독 시간의 환불을 요청하는 경우 남은 기간과 부여된 가치에 비례해 환불합니다 (Google 콘솔).

복구

구독 중인 상품이 지급되지 않았을 때 복구 기능을 수행할 수 있습니다. 복구는 해당 구독 상품의 소유권이 있는 경우 소유권 정책에 따라 지급합니다.

유예

구독 갱신 시점에 결제가 정상 처리되지 않을 경우 제공하는 결제 유예 기능이 있습니다. 결제 유예 기간은 구독 중인 상태와 동일한 가치를 부여해야 합니다.

계정 보류 (Google)

구독 결제 시점에 발생하는 문제로 결제 갱신에 실패하고, 유예 기간 내 문제를 해결하지 않은채 종료되는 경우를 계정 보류 상태라고 합니다. 최대 30일까지 구독 혜택을 받을 수 없도록 처리해야 합니다.

일시정지 (Google)

유저는 정기 결제를 최대 3개월까지 일시중지할 수 있습니다. 일시중지 기간이 만료된 후에는 자동 결제가 재개됩니다.

Google 알림 팝업 노출하기

Google 구독 결제가 유예 기간이거나 계정 보류 상태일 때는 유저에게 알림 팝업을 노출해야 합니다. 알림 팝업에는 현재 구독 상태와 문제 해결 방안, 그리고 마켓 설정으로 이동할 수 있는 버튼으로 구성하도록 권장합니다. 계정 상태가 유예나 보류인 상황에서 유저가 결제 정보를 변경하면 유예일 경우 설정된 결제 시점에 자동 결제되지만, 보류일 경우에는 유저가 직접 구독을 재시작해야 합니다. 재시작으로 유저의 구독 상태가 갱신되면 수동 복원 기능으로 구독 혜택을 받을 수 있도록 구독 상품 구매 페이지, 또는 적절한 위치에 구매 복원 버튼을 배치해주세요.

알림 팝업의 내용은 아래에 제공하는 예시 문구를 사용하거나 게임에 맞게 새로 구성할 수 있습니다.

  • 유예 기간일 때 알림 팝업 문구 예시
언어 문구
한국어 구독 자동 결제에 실패하였습니다. Google Play의 구독 설정으로 이동하여 결제 수단을 확인해주세요.
영어 Failed to make automatic payment for subscription.
Go to your Google Play subscription settings and check your payment method.
일본어 購読自動決済に失敗しました。
Google Playの購読設定に移動し、決済方法を確認してください。
중국어 간체 自动付款失败。
前往谷歌商店的订阅设置,查看付款方式吧。
중국어 번체 自動續訂扣款失敗。
請至Google Play的[訂閱]設定中,確認付款方式。
프랑스어 Echec du paiement automatique de l’abonnement.
Vérifiez le mode de paiement dans les paramètres d’abonnement de Google Play.
독일어 Die automatische Zahlung des Abonnements ist fehlgeschlagen.
Gehe zu den Einstellungen deiner Google Play-Abonnements und überprüfe deine Zahlungsmethode.
러시아어 Не удалось совершить автоматическую оплату за подписку.
Перейдите в настройки подписки Google Play и проверьте метод оплаты.
스페인어 No se pudo hacer el pago automático de la subscripción.
Ve a los ajustes de subscripción de tu Google Play y comprueba tu método de pago.
포르투갈어 Falha ao realizar o pagamento automático da assinatura.
Acesse as suas configurações de assinatura da Google Play e verifique o seu método de pagamento.
인도네시아어 Gagal melakukan pembayaran otomatis untuk berlangganan.
Silakan buka pengaturan langganan Google Play dan periksa metode pembayaranmu.
베트남어 Thanh toán tự động cho đăng ký không thành công.
Vui lòng vào thiết lập đăng ký của Google Play và kiểm tra phương thức thanh toán của bạn.
태국어 การชำระเงินอัตโนมัติเพื่อสมัครบริการล้มเหลว
กรุณาไปที่หน้าตั้งค่า Subscription ใน Google Play แล้วตรวจสอบวิธีการชำระเงิน
이탈리아어 Impossibile effettuare il pagamento automatico per l’abbonamento.
Vai alle impostazioni degli abbonamenti di Google Play e controlla il tuo metodo di pagamento.
터키어 Abonelik için otomatik ödeme başarısız.
Google Play Abonelik ayarına gidip ödeme yöntemini seçiniz.
아랍어 فشل في إجراء عملية الدفع الآلي للاشتراك.
انتقل إلى إعداداتك في غوغل بلاي وتحقق من طريقة الدفع.
  • 보류 상태일 때 알림 팝업 문구 예시
언어 문구
한국어 구독 자동 결제가 정상적으로 이뤄지지 않아 구독 서비스가 만료되었습니다.
Google Play의 구독 설정으로 이동하여 결제 방법을 확인하고 다시 결제를 해주세요.
결제 후엔 반드시 복원(restore)버튼을 클릭하여 구독 상태를 확인해주세요.
영어 The subscription service has expired because the auto subscription payment has failed.
Go to your Google Play subscription settings, check your payment method and try again.
Be sure to click Restore after purchase to check your subscription status.
일본어 購読自動決済が行われなかったため、購読サービスが終了しました。
Google Playの購読設定に移動して決済方法を確認し、もう一度お試しください。
決済した後、必ず【復元】ボタンをタップして購読状態を確認してください。
중국어 간체 由于自动付款失败,订阅服务已到期。
前往谷歌商店的订阅设置,查看付款方式后重新进行付款吧。
付款后请务必点击复原(restore)按键查看订阅状态。
중국어 번체 自動續訂扣款失敗,已取消訂閱服務。
請至Google Play的[訂閱]設定中,確認付款方式後,再次付款。
付款完畢後,請務必點選[回復]按鈕,並確認訂閱狀態。
프랑스어 Le service d’abonnement est interrompu : le paiement automatique ne s’est pas déroulé normalement.
Veuillez procéder de nouveau au paiement en vous rendant dans les paramètres d’abonnement de Google Play.
Après le paiement, confirmez bien le statut de l’abonnement en appuyant sur le bouton “Reprendre”.
독일어 Der Abonnement ist abgelaufen, weil die automatische Zahlung für das Abonnement fehlgeschlagen ist.
Gehe zu den Einstellungen deiner Google Play-Abonnements, überprüfe deine Zahlungsmethode und versuche es erneut.
Bitte stelle sicher, dass du nach dem Kauf auf Wiederherstellen klickst, um den Status deines Abonnements zu überprüfen.
러시아어 Срок действия подписки истек, поскольку не удалось произвести автоматическую оплату за подписку.
Перейдите в настройки подписки Google Play, проверьте метод оплаты и повторите вновь.
После оплаты подтвердите статус подписки, нажав на кнопку «Возобновить».
스페인어 La subscripción del servicio ha expirado porque ha fallado el método de pago automático de la subscripción.
Ve a los ajustes de subscripción de tu Google Play, comprueba tu método de pago e inténtalo de nuevo.
Asegúrate de pulsar Restaurar después de comprar para comprobar el estado de tu subscripción.
포르투갈어 O serviço de assinatura expirou porque houve uma falha no pagamento automático da assinatura.
Acesse as suas configurações de assinatura da Google Play, verifique o seu método de pagamento e tente novamente.
Certifique-se de clicar em Recuperar após a compra, para conferir o status da sua assinatura.
인도네시아어 Layanan berlangganan dihentikan karena pembayaran otomatis telah gagal.
Silakan buka pengaturan langganan Google Play, periksa metode pembayaranmu dan coba lagi.
Pastikan kamu klik Pulihkan setelah membeli untuk melihat status berlangganan.
베트남어 Dịch vụ đăng ký đã hết hạn do thanh toán đăng ký tự động không thành công.
Vui lòng vào thiết lập đăng ký của Google Play để kiểm tra phương thức thanh toán của bạn và thanh toán lại.
Đừng quên nhấn vào nút Khôi Phục (Restore) sau khi thanh toán để kiểm tra tình trạng đăng ký của bạn.
태국어 บริการจากการสมัครบริการหมดอายุแล้ว เนื่องจากชำระเงินอัตโนมัติไม่สำเร็จ
กรุณาไปที่หน้าตั้งค่า Subscription ใน Google Play แล้วตรวจสอบวิธีการชำระเงินอีกครั้ง
อย่าลืมกด Restore หลังซื้อ เพื่อตรวจสอบสถานะการสมัครของคุณ
이탈리아어 Il servizio di abbonamento è scaduto perché il pagamento dell’abbonamento automatico è fallito.
Vai alle impostazioni degli abbonamenti di Google Play, controlla il metodo di pagamento e riprova.
Assicurati di fare clic su Ripristina dopo l’acquisto per controllare lo stato dell’abbonamento.
터키어 Abone otomatik ödeme düzgün gerçekleşmediği için abonelik hizmeti sona erdi.
Google Play Abonelik ayarına gidip ödeme yöntemini kontrol edip tekrar ödeme yapınız.
Ödemeyi yaptıktan sonra geri yükle (restore) butonuna tıklayıp abonelik durumunuzu kontrol ediniz.
아랍어 انتهت صلاحية خدمة الاشتراك بسبب فشل دفع الاشتراك الآلي.
انتقل إلى إعداداتك في غوغل بلاي وتحقق من طريقة الدفع و حاول مرة أخرى.
تأكد من النقر فوق زر استعادة الأشتراك بعد الشراء للتحقق من حالة اشتراكك.

 

구독형 상품 구매 과정

도식도


 

연동 플로우

 

구독형 상품 API

상품 목록 조회

게임 내 구독형 상품 상점에 진입할 때 구독형 상품 목록 조회 API를 호출해야 합니다. 구독형 상품 목록 요청을 수행하면 ItemInfo() 메서드 콜백에 상품 목록 정보를 포함하여 결과를 반환합니다. ItemInfo() 메서드 콜백에 대한 설명은 상품 목록 조회에서 전달되는 클래스와 동일한 형태입니다.

구독형 상품 목록을 조회하려면 C2SModuleInappV4 클래스의 ItemInfo() 메서드를 호출하고 결과값으로 상품 목록의 상품 정보를 전달받습니다.

C2SModuleInappV4_ItemInfo

  • Request
    Argument Type Type Description Platform
    type string 요청 아이템 타입
    consumable: 소모성
    subscription: 구독형
    all
  • Response
    Argument Type Type Description Platform
    type string 요청 아이템 타입
    consumable: 소모성
    subscription: 구독형
    all
    productList array 아이템 목록 (Dictionary)
    에러 발생 상황에는 비어 있음 자세히
    all
  • productList 배열 타입
    Argument Type Type Description Platform
    marketPid string 마켓에 등록된 상품의 고유 ID all
    currency string 통화코드
    예. KRW, USD
    all
    price long 상품 가격 all
    displayPrice string 상품의 가격 문자열
    예. $100.00 자세히
    all
    title string 상품의 타이틀 all
    description string 상품 설명 all
    productType string 상품 타입
    consumable: 소모성
    subscription: 구독형
    all
    originalJson string 마켓에서 전달된 응답 데이터 Android
    displayOriginalPrice string 할인 전 가격 문자열 All
    originalPrice long 할인 전 가격 All
    iconUrl string 상품 아이콘 (512*512) Android
    coinsReward int Amazon 코인 획득 금액
    Amazon에서만 사용
    Android

다음은 ItemInfo() 메서드 구현 예제입니다.

Unity®

API Reference: C2SModule.InappV4.ItemInfo

Cocos2d-x

API Reference: C2SModuleInappV4_ItemInfo

iOS

API Reference: C2SModuleInappV4 ItemInfo

 

상품 구매

Apple App Store, Google Play Store에 등록된 marketPid를 매개변수로 C2SModuleInappV4 클래스의 Purchase() 메서드를 호출하여 구독형 상품 구매를 요청합니다.

C2SModuleInappV4_Purchase

  • Request
    Argument Type Type Description Platform
    type string 요청 아이템 타입
    consumable: 소모성
    subscription: 구독형
    all
    pid string 요청 아이템의 Product ID all
    additionalInfo string 구매 완료 시 전달받을 추가 데이터 (JSON string) android
    oldMarketPid string Type이 subscription이고 기존에 구독 중인 상품(oldMarketPid)을 새 구독 상품(pid)으로 변경할 때 사용 all
  • Response
    Argument Type Type Description Platform
    type string 요청 아이템 타입
    consumable: 소모성
    subscription: 구독형
    all
    receipt dictionary 영수증 정보 자세히 all
  • receipt 딕셔너리 타입
    Argument Type Type Description Platform
    type int 마켓 타입
    not_selected
    apple_appstore
    google_playstore
    hive_lebi
    onestore
    amazon_appstore
    samsung_galaxystore
    huawei_appgallery
    all
    additionalInfo String 구매 시 전달한 추가 데이터 (JSON String) android
    bypassInfo String Hive 영수증 검증 시 필요한 검증 데이터 (구매 영수증 포함) all
    hiveiapReceipt String 구매 영수증 원본 all
    product Dictionary 구매 상품 정보 all
  • product 딕셔너리 타입
    Argument Type Type Description Platform
    marketPid string 마켓에 등록된 상품의 고유 ID all
    currency string 통화코드
    예. KRW, USD
    all
    price long 상품 가격 all
    displayPrice string 상품의 가격 문자열
    예. $100.00 자세히
    all
    title string 상품의 타이틀 all
    description string 상품 설명 all
    productType string 상품 타입
    consumable: 소모성
    subscription: 구독형
    all
    originalJson string 마켓에서 전달된 응답 데이터 Android
    displayOriginalPrice string 할인 전 가격 문자열 All
    originalPrice long 할인 전 가격 All
    iconUrl string 상품 아이콘 (512*512) Android
    coinsReward int Amazon 코인 획득 금액
    Amazon에서만 사용
    Android

다음은 Purchase() 메서드 구현 예제입니다.

Unity®

API Reference: C2SModule.InappV4.Purchase

Cocos2d-x

API Reference: C2SModuleInappV4_Purchase

iOS

API Reference: C2SModuleInappV4 Purchase

 

구독 상태 복구

구독 중인 상품의 지급이 이루어지지 않았다면 구독 상태를 복구하는 Restore() 메서드를 호출해 이전에 구매한 구독 상품의 영수증을 요청해야 합니다.

C2SModuleInappV4_Restore

  • Request
    Argument Type Type Description Platform
    type string 요청 아이템 타입
    consumable: 소모성
    subscription: 구독형
    all
  • Response
    Argument Type Type Description Platform
    type string 요청 아이템 타입
    consumable: 소모성
    subscription: 구독형
    all
    receiptList array 영수증 정보 (Dictionary)
    에러 발생 상황에는 비어 있음 자세히
    all
  • receiptList 배열 타입
    Argument Type Type Description Platform
    type int 마켓 타입
    not_selected
    apple_appstore
    google_playstore
    hive_lebi
    onestore
    amazon_appstore
    samsung_galaxystore
    huawei_appgallery
    all
    additionalInfo String 구매 시 전달한 추가 데이터 (JSON String) android
    bypassInfo String Hive 영수증 검증 시 필요한 검증 데이터 (구매 영수증 포함) all
    hiveiapReceipt String 구매 영수증 원본 all
    product Dictionary 구매 상품 정보 all
  • product 딕셔너리 타입
    Argument Type Type Description Platform
    marketPid string 마켓에 등록된 상품의 고유 ID all
    currency string 통화코드
    예. KRW, USD
    all
    price long 상품 가격 all
    displayPrice string 상품의 가격 문자열
    예. $100.00 자세히
    all
    title string 상품의 타이틀 all
    description string 상품 설명 all
    productType string 상품 타입
    consumable: 소모성
    subscription: 구독형
    all
    originalJson string 마켓에서 전달된 응답 데이터 Android
    displayOriginalPrice string 할인 전 가격 문자열 All
    originalPrice long 할인 전 가격 All
    iconUrl string 상품 아이콘 (512*512) Android
    coinsReward int Amazon 코인 획득 금액
    Amazon에서만 사용
    Android

다음은 Restore() 메서드 구현 예제입니다.

Unity®

API Reference: C2SModule.InappV4.Restore

Cocos2d-x

API Reference: C2SModuleInappV4_Restore

iOS

API Reference: C2SModuleInappV4 Restore