메인 콘텐츠로 건너뛰기
PlayCamp가 제공하는 웹 기반 UI를 통해 부스트/쿠폰 기능을 제공하는 방법을 설명합니다.

개요

WebView는 PlayCamp가 제공하는 부스트/쿠폰 관리 웹 UI입니다. 게임 내 임베디드 브라우저(WebView)뿐만 아니라 외부 브라우저에서도 동작합니다. 별도의 UI 개발 없이 크리에이터 부스트와 쿠폰 기능을 제공할 수 있습니다.
게임 내 임베디드 브라우저, 외부 브라우저(모바일/PC) 모두 지원됩니다. 게임 환경에 맞게 적합한 방식을 선택하세요.

Server API 직접 연동 vs WebView 비교

항목Server API 직접 연동WebView
UI 개발게임사가 직접 구현 필요PlayCamp 제공 (추가 개발 불필요)
연동 난이도각 API별 개별 연동OTT 발급 1개 API만 연동
커스터마이징완전한 자유도테마 색상/폰트 커스터마이징
다국어게임사가 직접 처리자동 지원 (한국어/영어)
적합한 경우게임 UX에 완벽히 맞춰야 할 때빠르게 기능을 제공하고 싶을 때
WebView와 Server API 직접 연동은 동시에 사용 가능합니다. 예를 들어 부스트는 WebView로, 결제 등록은 Server API로 처리할 수 있습니다.

아키텍처

연동 흐름

1

OTT 발급 (게임 서버)

게임 서버에서 Server API Key로 OTT(One-Time Token)를 발급합니다.
2

WebView 열기 (게임 클라이언트)

게임 서버로부터 받은 OTT를 URL 파라미터에 포함하여 WebView를 엽니다.
https://sandbox-sdk-api.playcamp.io/webview/?ott={token}
3

유저 인터랙션

유저가 WebView에서 크리에이터 부스트 등록/변경/해제, 쿠폰 검증/사용 등을 수행합니다. 별도의 게임 서버 처리가 필요 없습니다.
4

웹훅으로 결과 수신

WebView에서 발생한 이벤트(부스트 등록, 쿠폰 사용 등)가 웹훅으로 게임 서버에 전달됩니다.

OTT 발급 API

요청

curl -X POST "https://sandbox-sdk-api.playcamp.io/v1/server/webview/ott" \
  -H "Authorization: Bearer ak_server_xxx:secret" \
  -H "Content-Type: application/json" \
  -d '{
    "userId": "user_12345"
  }'

파라미터

필드타입필수설명
userIdstringO게임 내 유저 식별자
campaignIdstring-특정 캠페인으로 WebView 범위 제한
codeChallengestring-PKCE S256 challenge (Base64URL-encoded SHA256, 43-128자)
callbackIdstring-웹훅 추적용 ID
metadataobject-추가 메타데이터 (세션에 저장)

응답 (201 Created)

{
  "data": {
    "ott": "a1b2c3d4e5f6...64자hex",
    "expiresIn": 60
  }
}
필드설명
ottOne-Time Token (64자 hex 문자열)
expiresIn만료까지 남은 시간 (초, 기본 60초)
OTT는 1회성이며 60초 TTL입니다. 발급 후 빠르게 WebView를 열어야 합니다. 반드시 게임 서버에서 발급해야 하며, 클라이언트에서 직접 발급하면 Server Key가 노출됩니다.

WebView URL 구성

기본 URL

환경URL
Sandboxhttps://sandbox-sdk-api.playcamp.io/webview/?ott={token}
Livehttps://sdk-api.playcamp.io/webview/?ott={token}

옵션 파라미터

파라미터설명예시
lang언어 설정 (ko, en)?ott=xxx&lang=en
tabs표시할 탭 제한 (쉼표 구분)?ott=xxx&tabs=sponsor,coupon
tabs 옵션
설명
sponsor부스트 관리 탭
coupon쿠폰 사용 탭
campaigns캠페인 목록 탭
creators크리에이터 검색 탭
tabs 미지정 시 기본 탭이 표시됩니다 (sponsor, coupon).

테마 커스터마이징

WebView의 색상과 폰트를 URL 파라미터로 커스터마이징할 수 있습니다.
파라미터설명기본값예시
primaryColor버튼/강조 색상 (hex)게임 테마 색상primaryColor=FF6B35
bgColor배경 색상 (hex)다크 테마bgColor=1a1a2e
textColor텍스트 색상 (hex)밝은 텍스트textColor=ffffff
fontFamily폰트 패밀리시스템 기본fontFamily=Noto Sans KR
hex 색상값은 # 없이 입력합니다. 예: primaryColor=FF6B35
전체 예시
/webview/?ott=xxx&lang=ko&tabs=sponsor,coupon&primaryColor=FF6B35&bgColor=1a1a2e&textColor=ffffff

주요 기능

부스트 관리

WebView에서 유저가 크리에이터를 검색하고 부스트를 등록/변경/해제할 수 있습니다.
  • 크리에이터 검색: 크리에이터 키 또는 이름으로 검색 (실시간 자동완성)
  • 부스트 등록: 선택한 크리에이터에게 부스트 등록
  • 부스트 변경: 다른 크리에이터로 변경 (30일 쿨다운 적용)
  • 부스트 해제: 현재 부스트 해제
부스트 화면 - 모바일
부스트 화면 - PC 크리에이터 키 프리필 URL에 크리에이터 키를 포함하여 검색 폼을 미리 채울 수 있습니다:
/webview/?ott=xxx#sponsor?creatorKey=ABC12

쿠폰 사용

2단계로 쿠폰을 사용합니다: 검증 → 사용
  • 코드 입력: 5-50자, 자동 대문자 변환, 한글 입력 시 영문 키 위치로 자동 변환
  • 검증: 유효성 확인 및 보상 아이템 미리보기
  • 사용: 확인 버튼으로 최종 사용 (사용 ID 반환)
쿠폰 화면 - 모바일
쿠폰 화면 - PC

웹훅 이벤트 연동

WebView에서 유저가 수행한 액션은 웹훅으로 게임 서버에 전달됩니다.

WebView에서 발생하는 이벤트

이벤트설명주요 data 필드
sponsor.created부스트 등록userId, campaignId, creatorKey
sponsor.ended부스트 해제userId, campaignId, creatorKey
coupon.redeemed쿠폰 사용couponCode, userId, usageId, reward

웹훅 페이로드 예시

sponsor.created (부스트 등록)
{
  "events": [
    {
      "event": "sponsor.created",
      "timestamp": "2024-01-15T10:30:00.000Z",
      "callbackId": "cb_001",
      "data": {
        "userId": "user_12345",
        "campaignId": "campaign_001",
        "creatorKey": "ABC12"
      }
    }
  ]
}
coupon.redeemed (쿠폰 사용)
{
  "events": [
    {
      "event": "coupon.redeemed",
      "timestamp": "2024-01-15T10:31:00.000Z",
      "callbackId": "cb_001",
      "data": {
        "couponCode": "CREATOR-ABC12-001",
        "userId": "user_12345",
        "usageId": 5678,
        "reward": [{ "itemId": "gem", "itemQuantity": 100 }]
      }
    }
  ]
}
OTT 발급 시 callbackId를 지정하면, 해당 세션에서 발생하는 모든 웹훅 이벤트에 지정된 ID가 포함됩니다. 웹훅 수신 및 서명 검증 방법은 웹훅 이벤트 페이지를 참고하세요.

보안

OTT (One-Time Token)

  • 1회성: OTT는 세션 교환 시 즉시 삭제됩니다. 재사용 불가합니다
  • 60초 TTL: 발급 후 60초 내에 사용해야 합니다
  • 서버 발급 필수: Server API Key가 필요하므로 게임 서버에서만 발급 가능

세션 관리

  • 세션 쿠키: httpOnly, SameSite=strict 설정으로 XSS/CSRF 공격 방지
  • 세션 TTL: 10분 (마지막 API 호출 기준으로 자동 연장)
  • 단일 세션: 같은 유저는 하나의 세션만 허용. 새 세션 생성 시 기존 세션 자동 무효화

CSRF 보호

WebView 내부의 상태 변경 요청(POST/PUT/DELETE)에는 CSRF 토큰이 자동으로 포함됩니다. 게임사에서 별도로 처리할 필요 없습니다.

PKCE (선택)

앱 환경에서 추가 보안이 필요한 경우 PKCE(Proof Key for Code Exchange)를 사용할 수 있습니다.
import crypto from 'crypto';

// 1. 코드 생성 (게임 서버)
const codeVerifier = crypto.randomBytes(32).toString('base64url');
const codeChallenge = crypto
  .createHash('sha256')
  .update(codeVerifier)
  .digest('base64url');

// 2. OTT 발급 시 codeChallenge 포함
const { ott } = await server.webview.createOtt({
  userId: 'user_12345',
  codeChallenge,
});

// 3. WebView URL에 codeVerifier 포함
const url = `https://sandbox-sdk-api.playcamp.io/webview/?ott=${ott}&code_verifier=${codeVerifier}`;

FAQ

세션 만료 시 어떻게 되나요?

세션이 만료되면 WebView에 재접속 안내 화면이 표시됩니다. 유저가 계속 사용하려면 게임 서버에서 새 OTT를 발급받아 WebView를 다시 열어야 합니다.
세션 TTL은 10분이며, API 호출 시마다 자동 연장됩니다. 단, 유휴 상태(아무 동작 없이 방치)에서는 연장되지 않습니다.

campaignId 스코핑이란?

OTT 발급 시 campaignId를 지정하면 WebView 전체가 해당 캠페인으로 범위가 제한됩니다:
  • 부스트 등록/변경/해제 시 해당 캠페인의 크리에이터만 표시
  • 캠페인 목록 대신 해당 캠페인 정보만 표시
  • 해당 캠페인에 참여하는 크리에이터만 검색 가능
존재하지 않는 campaignId를 지정하면 OTT 발급이 실패합니다 (404).

다국어는 어떻게 지원되나요?

  • 기본: 브라우저 언어 설정에 따라 자동 감지 (한국어/영어)
  • URL 파라미터 지정: ?lang=ko 또는 ?lang=en
  • 유저가 변경한 언어 설정은 브라우저에 저장되어 다음 접속 시에도 유지됩니다

OTT를 미리 발급해둘 수 있나요?

권장하지 않습니다. OTT는 60초 TTL이므로, 유저가 WebView 열기를 요청하는 시점에 발급하세요.

WebView에서 결제도 되나요?

아니요. WebView는 부스트와 쿠폰 기능만 제공합니다. 결제 등록은 게임 서버에서 Server API를 직접 호출해야 합니다.

동시에 여러 기기에서 접속하면 어떻게 되나요?

같은 유저는 하나의 세션만 허용됩니다. 새 기기에서 WebView를 열면 이전 기기의 세션이 자동으로 무효화되고, 이전 기기에서는 세션 만료 안내가 표시됩니다.