Apps Kit SDK logoApps Kit SDK
개발자 문서 · Apps Kit SDK 포털

페이월

사이드바의 페이월(Paywall) 그룹(상품, 오퍼링, 페이월 템플릿)은 페이월 UI 코드를 작성하지 않고도 인앱 구독과 일회성 구매를 구성하고 판매할 수 있는 독립적인 기능 영역입니다. 세 구성 요소는 정해진 순서로 연결됩니다. **상품(Product)**은 Google Play, App Store 또는 Amazon에서 가져오거나 직접 입력한 단일 스토어 SKU(구독 기본 요금제, 프로모션 또는 일회성 구매)입니다. **오퍼링(Offering)**은 한 앱의 여러 상품을 이름이 있는 그룹으로 묶고, 그중 하나를 기본 선택 상품으로 지정합니다. **페이월 템플릿(Paywall Template)**은 포털에서 시각적으로 제작하는 실제 화면 디자인으로, 오퍼링의 상품을 표시하고 구매를 실행합니다. 템플릿을 게시한 후에는 이 가이드의 앞부분에서 설명한 앱 상세 정보 → **앱 플레이스홀더용 페이월(Paywalls for App Placeholders)**에서 앱 내 실제 노출 위치에 연결합니다.

상품

상품(Products) 페이지(/paywall-products)는 관리하는 모든 앱의 상품을 하나의 목록형 테이블에 표시합니다. 열은 #, 제목(Title), 앱(App)(아이콘, 이름, 패키지), 스토어(Store)(Google Play, Apple App Store 또는 Amazon Appstore 플랫폼 아이콘. 앱의 스토어를 인식할 수 없으면 회색 대시 표시), 스토어 식별자(Store identity)(스토어 측 상품/SKU 문자열, 고정폭 글꼴로 표시), 기간(Time Period), 상태(Status) 배지(활성/비활성), 생성일(Created At), 행별 작업으로 구성됩니다. 검색창에서는 제목, SKU, 설명, 앱 이름 또는 패키지로 검색할 수 있습니다. 앱, 상태, 스토어, 기간 필터로 목록을 더 좁힐 수 있으며, 하단에는 다른 페이월 페이지와 동일한 페이지 탐색 영역이 표시됩니다.

1789744318189-products-list.png

새 상품을 만들려면 오른쪽 상단의 **상품 만들기(Create Product)**를 클릭하고, 기존 상품을 편집하려면 해당 행을 클릭합니다. 어느 쪽이든 두 패널로 구성된 편집기가 열립니다. 먼저 상품이 속할 앱을 선택한 다음(선택하기 전까지 다른 항목은 모두 비활성화됨), 해당 앱의 스토어에서 **가져오기(Import)**를 실행하거나 **상품 추가(Add product)**로 직접 만듭니다.

1789744336705-products-tree-grouped.png

앱에 상품이 있으면 왼쪽 패널에 유형별로 묶여 표시됩니다. 수동 등록 상품(Manual products)(포털에서 직접 생성), 일회성 상품(One-time products), 각 **구독(Subscription)**으로 구분됩니다. 구독을 펼치면 **기본 요금제(Base plans)**와 각 기본 요금제 아래에 중첩된 **프로모션(Offers)**이 표시됩니다. 기본 요금제는 하나의 구독에 속하는 스토어의 결제/가격 단위입니다. 예를 들어 동일한 구독에 "Weekly Pro"와 "Monthly Pro" 기본 요금제가 함께 있을 수 있습니다.

Google Play(Android)에서 가져오기. Google Play 앱에서 **가져오기 → Google Play 연결(Connect Google Play)**을 선택하면 단순한 입력 양식 대신, 최초 한 번만 수행하면 되는 2단계 설정 절차가 안내됩니다.

1789744372767-products-import-google-play.png

  • 1. Google Cloud — Google Cloud Console에서 서비스 계정을 만들고, 해당 계정에 Google Play Android Developer API를 사용 설정한 다음 JSON 키를 다운로드합니다.
  • 2. Play Console — 서비스 계정의 이메일을 Play Console에 초대하고 앱 정보 보기(View app information) 및 스토어 등록정보 관리(Manage store presence) 권한을 부여합니다. 모달에는 복사할 이메일과 두 콘솔로 바로 이동하는 링크가 표시됩니다.

다운로드한 서비스 계정 JSON 키를 업로드하고, 필요하면 **비활성 기본 요금제 및 프로모션 포함(Include inactive base plans and offers)**을 선택한 다음 **상품 불러오기(Fetch products)**를 클릭합니다. 이 옵션은 기본적으로 꺼져 있으므로 Play Console에서 현재 활성 상태인 항목만 가져옵니다. 각 결과는 제목, 설명, 가격 미리보기, 상태가 미리 입력된 상품 초안으로 생성됩니다. Google의 경우에만 전체 기본 요금제/프로모션 트리(구독 ID, 기본 요금제 ID, 각 프로모션의 유형, 가격, 단계, 이용 자격)도 포함됩니다. 가져오기를 다시 실행하면 이미 저장한 항목은 변경하지 않고, 아직 저장하지 않은 초안만 Play Console의 정보로 새로고침합니다.

Apple App Store(iOS)에서 가져오기. App Store 앱에서 **App Store 상품 가져오기(Import App Store products)**를 선택하면 앱의 Bundle ID(미리 입력됨), Key ID, Issuer ID를 입력하고 인앱 구입 키(.p8) 파일을 업로드하라는 메시지가 표시됩니다. Key ID, Issuer ID, .p8 파일은 모두 App Store Connect의 사용자 및 액세스 → 통합 → 인앱 구입 페이지에서 확인하거나 발급받을 수 있으며, 모달에 해당 페이지로 바로 이동하는 링크가 있습니다. Key ID, Issuer ID, .p8 파일이 모두 준비되기 전까지 상품 불러오기는 비활성화됩니다. Apple 고유의 계층 구조(구독 그룹 → 상품) 때문에 가져온 상품에는 Google과 같은 기본 요금제 트리가 생성되지 않습니다. 상태는 Apple의 실제 심사 상태를 기준으로 결정되므로, 실제로 APPROVED 상태인 구독만 활성 상태로 가져옵니다. 심사 중이거나 개발자 조치가 필요하거나 거절된 항목은 모두 비활성 상태로 가져옵니다.

Amazon Appstore에서 가져오기. Amazon은 인증 정보 대신 파일을 사용하는 방식입니다. 상품 카탈로그 JSON(Product catalog JSON)(Amazon App Tester에서 내보낸 상품 파일)을 업로드하고 **상품 가져오기(Import products)**를 클릭합니다. 항목 유형이 SUBSCRIPTION이면 구독 상품으로, ENTITLED 또는 CONSUMABLE이면 일회성 상품으로 생성됩니다. Amazon에는 기본 요금제 개념이 없으므로, 가져온 각 상품에는 기본 요금제 트리 대신 Amazon Product ID/SKU가 직접 저장됩니다.

상품 직접 만들기. 상품 추가를 클릭하면 스토어 식별자를 가져오는 대신 직접 입력하는 초안이 생성됩니다. 아직 스토어 콘솔에서 상품을 설정하지 않았거나 포털에서 먼저 준비하려는 경우에 유용합니다. 표시되는 식별자 필드는 앱의 스토어에 따라 달라집니다. Google Play는 구독 ID, 기본 요금제 ID, 결제 기간을 요구하고, App Store는 구독 그룹과 상품 ID를, Amazon은 상품 ID와 상품 유형을 요구합니다. 상품을 정기 구독 대신 일회성 상품으로 지정할 수도 있습니다.

가져오기에 성공해 값이 채워진 필드는 읽기 전용으로 전환되며, *"스토어에서 가져온 정보입니다. Google Play / App Store / Amazon에서 수정한 후 다시 가져오세요"*라는 툴팁이 표시됩니다. 따라서 여기에서 직접 편집하는 대신 실제 스토어 콘솔에서 변경한 후 가져오기를 다시 실행해야 합니다.

1789744448829-products-base-plan-offers.png

스토어와 관계없이 모든 상품에는 제목(Title)(100자), 필수 설명(Description)(500자), 선택 사항인 기능/혜택(Features / Benefits) 태그, 사용자 지정 키/값 매개변수(Params), 상태(Status)(활성/비활성)가 있습니다. 가져온 상품도 상태를 전환할 수 있습니다. **기간(Time Period)**은 매주, 매월, 3개월, 6개월, 매년, 평생 또는 자유롭게 입력하는 **사용자 지정 기간(Custom Period)**으로 설정합니다. 저장한 상품은 다음 단계에서 오퍼링에 연결합니다.

오퍼링이나 페이월 템플릿에서 아직 참조 중인 상품을 삭제할 때는 아무런 안내 없이 실패하지 않습니다. 포털은 상품이 연결된 항목의 이름을 명시하는 추가 확인 메시지를 표시합니다. 해당 위치에서도 상품이 제거된다는 사실에 동의하는 체크박스를 직접 선택해야 삭제할 수 있습니다.

오퍼링

**오퍼링(Offering)**은 한 앱의 여러 상품을 하나의 이름 있는 묶음으로 구성하여 페이월 템플릿에 표시할 수 있게 합니다. 특정 페이월에서 판매할 수 있는 상품이 무엇인지, 그리고 어떤 상품을 기본 선택할지 결정하는 계층입니다.

1789744472318-offerings-list.png

오퍼링(Offerings) 페이지(/paywall-offerings)에는 #, 오퍼링 이름(Offering Name), 앱(App), 상품(Products) 수, 상태(Status), 생성일(Created At), 작업이 표시됩니다. 상품 페이지와 동일하게 검색 및 앱/상태 필터를 사용할 수 있습니다. 새로 만들려면 **오퍼링 만들기(Create Offering)**를 클릭합니다.

1789744566510-offerings-edit-products.png

모든 오퍼링은 정확히 하나의 앱에 속합니다. 선택할 수 있는 상품이 앱에 따라 결정되므로 앱을 먼저 선택하세요. 나중에 앱을 변경하면 선택 중이던 상품이 초기화됩니다. 이름(Name)(100자)과 선택 사항인 설명(Description)(500자)을 입력한 다음, 오퍼링에 포함할 상품(Products in Offering) 체크리스트에서 이 오퍼링에 포함할 앱의 상품(개별 기본 요금제 변형 포함)을 선택합니다. 모두 선택(Select all) 기능과 별도의 검색창도 제공됩니다. 선택한 각 상품에는 기본값(Default) 버튼이 있습니다. 이 버튼을 클릭하면 해당 상품이 오퍼링의 기본/사전 선택 패키지로 지정되고, 이전 기본 상품의 지정은 자동으로 해제됩니다. 따라서 오퍼링마다 항상 정확히 하나의 기본 상품이 유지됩니다. 저장하려면 상품을 하나 이상 선택해야 합니다.

페이월 템플릿은 정확히 하나의 오퍼링에 연결됩니다. 이 연결은 다음에 설명할 템플릿의 앱 구성(Configure App) 대화상자에서 설정합니다. 이후 템플릿 캔버스에 배치하는 각 가격 카드는 연결된 오퍼링에 속한 특정 상품 하나에 바인딩됩니다. 이 바인딩이 페이월에 표시할 수 있는 실제 상품과 가격을 결정합니다.

페이월 템플릿

**페이월 템플릿(Paywall Templates)**에서는 네이티브 UI 코드를 작성하지 않고 실제 페이월 화면을 시각적으로 디자인합니다. 템플릿을 한 번 제작해 하나의 앱과 하나의 오퍼링에 연결하고, 여러 언어로 번역할 수 있습니다. 게시한 템플릿은 앱 상세 정보에서 실제 노출 위치에 연결할 수 있습니다.

1789744608353-paywall-templates-list.png

템플릿 목록

페이월 템플릿 페이지(/paywall-templates)에는 생성한 모든 페이월이 표시됩니다. 열은 #, 템플릿 이름(Template Name), 상태(Status)(게시됨/초안), 할당된 앱(Apps), 수정일(Updated At), 작업으로 구성됩니다. 상태와 앱 필터로 목록을 좁히고, 검색창에서 이름으로 검색할 수 있습니다.

새 페이월 만들기

**페이월 만들기(Create Paywall)**를 클릭하면 두 가지 시작 방법이 제공됩니다. 처음부터 만들기(Start from scratch)("빈 휴대폰 화면을 열고 스택, 텍스트, 패키지, 버튼, 법적 고지 링크를 직접 추가") 또는 템플릿 사용(Use template)("기존 페이월을 선택하여 동일한 캔버스와 구성 요소로 새 초안 만들기")을 선택할 수 있습니다.

1789744746399-paywall-create-picker.png

템플릿 사용을 선택하면 **기본 템플릿(Default Templates)**과 **내 템플릿(Your Templates)**으로 나뉜 갤러리가 열립니다. 기본 템플릿은 각각 이름과 설명이 있는 몇 가지 내장 시작 디자인으로, 원하는 대로 완전히 수정할 수 있습니다. 내 템플릿은 계정에 이미 저장된 템플릿입니다. 카드를 선택하면 해당 템플릿의 캔버스와 구성 요소가 새 초안으로 복제됩니다. 상품 바인딩은 복사되지 않으므로 이후 각 가격 카드를 자신의 오퍼링에 맞게 다시 매핑해야 합니다. 반면 처음부터 만들기를 선택하면 완전히 빈 캔버스가 열립니다.

1789744771801-paywall-use-template-gallery.png

페이월 디자인하기(캔버스)

새 템플릿이든 기존 템플릿이든 열면 빌더로 이동합니다.

1789744792287-paywall-builder-overview.png

작업 영역 위의 헤더에는 제목, 제목 옆의 이름 변경용 연필 아이콘, 앱 구성(Configure App), 초안(Draft) / 라이브(Live) 전환, 언어 선택기, 초기화(Clear) / 초안 삭제(Discard draft) / 초안 저장(Save draft) / **게시(Publish)**가 한 줄로 배치되어 있습니다. 왼쪽 패널은 **레이어(Layers)**와 구성 요소 추가(Add Components) 사이를 전환합니다. 레이어에는 현재 캔버스의 모든 요소가 트리로 표시되며 스택 복사/붙여넣기 컨트롤이 있습니다. 스택의 **+**를 클릭하면 삽입할 블록을 고르는 구성 요소 추가 팔레트가 열립니다. 가운데 패널에는 실제 크기의 휴대폰 프레임으로 실시간 미리보기가 표시됩니다. 오른쪽 패널은 선택한 항목의 **속성 패널(Inspector)**로, 콘텐츠(Content), 레이아웃(Layout), 레이어 순서(Layer Order), 모양(Appearance), **동작(Actions)**으로 구성됩니다.

1789744812066-paywall-add-components.png

구성 요소 팔레트는 용도별로 나뉩니다. 기본(Core) 블록에는 텍스트, 이미지, GIF, 닫기 버튼, 동영상, 스택 컨테이너(세로, 가로 또는 겹침), 복합 헤더 블록, 빈 사용자 지정 컨테이너가 있습니다. 페이월(Paywall) 블록에는 패키지(Package)(클릭 가능한 가격 카드로, 기본형, 강조형, 간결형, 무료 체험, 비율 할인, 정액 할인, 첫 이용 가격의 7가지 변형 제공), 구매 버튼(Purchase button), 일회성 구매 버튼(One-time purchase button), 빠른 결제(Express checkout) 버튼이 있습니다. 상호작용(Interactive) 블록에는 탭(월간/연간과 같은 요금제 그룹 전환용), 스위치, 버튼, 캐러셀이 있습니다. 콘텐츠(Content) 블록에는 신뢰도를 높이는 후기 인용문, 기능 목록, 배지, "수상"/최적 혜택 배지, 이용약관/개인정보 처리방침용 법적 고지 링크가 있습니다.

가격 연결하기

1789744829200-paywall-package-product-data.png

각 패키지 카드의 콘텐츠 섹션에는 오퍼링 패키지(Offering package) 드롭다운이 있습니다. 여기에는 앱 구성에서 설정한 오퍼링의 상품만 표시됩니다(구독 → 기본 요금제 → 우선 적용 프로모션 순서). 항목을 선택하면 카드가 해당 상품에 바인딩됩니다. 그러면 속성 패널에 해당 상품에서 직접 가져온 읽기 전용 상품 데이터(Product data) 실시간 미리보기(제목, 설명, 가격 미리보기, 기능)가 표시됩니다. {planKey.price}와 같은 가격 토큰으로 캔버스의 다른 위치에서도 이 데이터를 참조할 수 있다는 안내도 표시됩니다. 카드의 시각적 레이아웃이 선택한 패키지에 필요한 구성과 맞지 않으면(예: 무료 체험이 설정된 상품에 일반 가격 카드를 연결한 경우), 속성 패널에 [x] 레이아웃 적용(Apply [x] layout) 바로가기가 표시되어 둘을 일치시킬 수 있습니다. 구매 버튼과 가격 카드에는 **표시할 탭(Visible under tab)**도 지정할 수 있습니다. 이를 통해 일치하는 탭 옵션이 선택된 경우에만 카드를 표시할 수 있습니다.

앱 구성에서는 템플릿에 표시할 상품을 가져올 앱과 오퍼링을 설정합니다.

1789744847559-paywall-configure-app.png

왼쪽에서 앱 하나를 선택한 다음, 오른쪽에서 해당 앱의 오퍼링 하나를 선택합니다. 각 옵션에는 오퍼링 키와 최대 5개의 상품 패키지 키가 미리 표시됩니다. 템플릿은 한 번에 정확히 하나의 앱과 하나의 오퍼링을 대상으로 합니다.

언어 및 번역

1789744871233-paywall-language-dropdown.png

헤더의 언어 드롭다운에는 기본 언어와 추가한 모든 언어가 나열되며, 각 언어에는 기본(Default), 번역됨(Translated), 업데이트 필요(Needs update), 초안(Draft) 중 하나의 태그가 표시됩니다. **언어 관리(Manage languages)**에서는 언어를 추가하거나 삭제할 수 있으며, 추가 가능한 언어 수는 요금제에 따라 제한됩니다. **AI로 번역(Translate with AI)**은 선택한 언어로 기계 번역을 수행하며, 이 기능에도 요금제별 시간당/일일 사용 제한이 적용됩니다. 번역은 레이아웃을 별도로 복사하는 것이 아니라 하나의 기본 언어 디자인 위에 텍스트 대체 값을 덧씌우는 방식입니다. 따라서 기본 언어가 아닌 언어를 선택하면 캔버스가 "번역 텍스트 편집 가능, 스타일 잠김" 모드로 전환됩니다. 번역 중에는 요소를 추가하거나 이동하거나 크기 또는 스타일을 변경할 수 없습니다. 대신 모든 텍스트 필드의 속성 패널이 번역 입력 모드로 전환되며, 여기에 입력하면 해당 언어의 텍스트만 저장됩니다.

초안, 라이브 버전 및 게시

초안(Draft) / 라이브(Live) 전환으로 확인할 템플릿 버전을 선택합니다. 라이브 버전은 읽기 전용이므로 변경하려면 먼저 초안으로 전환해야 합니다. **초기화(Clear)**는 로컬 캔버스를 비웁니다. 저장하기 전까지 서버에서는 아무것도 삭제되지 않습니다. **초안 삭제(Discard draft)**는 저장하지 않은 초안을 영구적으로 제거하고 마지막으로 게시한 버전을 다시 불러옵니다. **초안 저장(Save draft)**은 현재 라이브 버전을 변경하지 않고 현재 캔버스를 초안으로 저장합니다. **게시(Publish)**는 정확히 하나의 앱과 오퍼링이 구성되고 모든 패키지 카드가 실제 상품에 바인딩될 때까지 비활성화됩니다. 이 조건을 모두 충족하면 현재 초안을 새로운 게시/라이브 버전으로 전환할 수 있습니다. 게시된 버전은 앱 상세 정보 → **앱 플레이스홀더용 페이월(Paywalls for App Placeholders)**에서 앱 플레이스홀더에 할당할 수 있습니다.