드롭스 기술 가이드
목차
- Twitch 드롭스 개요
- 드롭스 기술 가이드
- 드롭스 캠페인 가이드
소개
이 페이지에서는 드롭스 시스템을 설정하기 위한 기술적 사전 요구 사항과, 게임에 적합한 드롭스 전달 메커니즘을 선택할 때 고려해야 할 사항에 대해 설명합니다. 이 문서는 기술 가이드일 뿐이므로 시스템을 설계하기 전에 신중하게 검토하고 시스템 구축 과정에서도 참조해야 합니다.
조직 및 게임 소유권
드롭스 캠페인을 생성하기 전에, 드롭스 캠페인을 생성하려는 게임 카테고리의 소유권을 가진 개발자 조직 이 있어야 합니다. 이러한 조직이 이미 존재하는지 확인하려면 회사에 문의하세요. 그렇지 않은 경우 조직을 만드는 방법에 대한 자세한 내용은 조직 등록 및 관리하기를 참조하세요.
조직에 게임이 할당되어 있지 않은 경우 게임 소유권을 요청해야 합니다. Twitch에서 게임 카테고리의 소유권을 요청하는 방법에 대한 자세한 내용은 게임 관리를 참조하세요.
계속하려면 조직과 게임 소유권 요청이 모두 승인될 때까지 기다려야 합니다. 이러한 요청을 방금 한 경우 승인되기까지 1~2주가 소요될 수 있습니다. 조직 요청이 거부되는 일반적인 문제를 방지하려면 내 조직 요청이 거부된 이유를 참조하세요.
계정 연결
Twitch 시청자가 인게임 보상을 수령하려면 본인의 Twitch 계정과 게임 계정을 연결해야 합니다. 계정 연결 은 Twitch의 관점에서 유저가 귀사의 애플리케이션(클라이언트 ID)에 대해 인증하여, 유저의 Twitch 계정과 타사(귀사) 애플리케이션을 연결하는 것을 말합니다.
클라이언트 ID 얻기
조직에 속한 유저가 소유한 클라이언트 ID( 애플리케이션이라고도 함)가 있어야 합니다. 아직 애플리케이션이 없는 경우, 앱 등록하기에 안내된 단계를 따르세요. Twitch의 애플리케이션은 이전할 수 없으므로 이 애플리케이션을 생성하는 계정은 공유 회사 계정으로 사용하는 것이 좋습니다.
이 권장 사항은 직원이 개인 계정으로 애플리케이션을 소유한 채로 조직을 떠나면 조직에서 애플리케이션을 변경할 수 없게 되므로 매우 중요합니다.
계정 연결 프로세스 설정
유저가 애플리케이션에 계정을 연결하지 않은 경우, 계정 연결을 완료하도록 귀사의 웹사이트로 리디렉션됩니다. Twitch와 게임 계정을 올바르게 연결하려면 다음 절차를 따라야 합니다:
- 시청자에게 귀사의 계정 시스템에 로그인 요청합니다
- 시청자에게 본인의 Twitch 계정으로 귀사의 Twitch 애플리케이션을 허용해 달라고 요청합니다
- Twitch 계정 <> 게임 계정 매핑을 시스템에 저장합니다
특히, 다음 정보를 저장하는 것을 권장합니다.
- 게임 계정 ID
- Twitch OAuth 토큰
- Twitch 새로고침 토큰
- Twitch 유저 ID
게임 내에서 계정 연결이 가능하더라도, Twitch 시청자들이 계정을 연결할 수 있도록 웹페이지를 호스팅하는 것을 추천합니다. 유저가 계정을 연결할 페이지의 URL을 캠페인 설정에 추가하면 Twitch가 시청자를 올바른 계정 연결 페이지로 리디렉션할 수 있습니다.
클라이언트 ID로 유저를 인증하는 방법에 대한 자세한 내용은 Twitch OAuth 가이드를 참조하세요. 드롭스의 가장 일반적인 인증 방식은 Implicit Grant Flow와 Authorization Code Grant Flow입니다. 이 단계에서 사용하는 클라이언트 ID는 이 페이지의 앞부분에서 설명한 클라이언트 ID여야 하며, 그렇지 않으면 계정 연결 프로세스가 작동하지 않습니다.
계정 연결 해제 처리하기
유저는 고의든 실수든 언제든지 Twitch 계정과 게임 계정 간의 계정 연결을 끊을 수 있습니다. 다음과 같은 경우에 계정 연결이 해제될 수 있습니다:
- 비밀번호를 변경한 경우
- Twitch에서 임시 정지된 경우
- 계정의 연결 페이지에서 수동으로 연결을 제거한 경우
- OAuth 토큰과 새로고침 토큰 모두 만료된 경우
- 참고: OAuth 토큰만 만료된 경우 계정 링크는 자동으로 제거되지 않습니다. 이 경우 두 토큰 모두 만료되어야 합니다.
어떤 경우든, 결국 클라이언트 ID에 부여된 유저의 권한이 취소되거나 제거되었기 때문입니다. 유저가 계정을 해제했는지 확인하려면 유저가 가진 OAuth 토큰의 유효성을 확인해 보면 됩니다.
유저는 연결 해제 후 계정을 다시 연결할 수 있습니다. 다음은 유저의 계정 재연결을 처리하기 위한 권장 사항입니다:
- 게임 내 아이템 지급은 Twitch 유저 ID당 1회로 제한해야 합니다 – Twitch 계정을 게임 계정에 연결해 이미 해당 인게임 콘텐츠 이행을 완료한 유저는 동일한 Twitch 계정을 다른 두 번째 게임 계정에 다시 연결하더라도 동일한 인게임 아이템을 획득할 수 없어야 합니다.
- Twitch 계정은 게임 내에서 특정 드롭스를 한 번만 받을 수 있어야 합니다 – 이미 드롭스를 수령한 유저는 동일한 Twitch 계정을 다른 게임 계정에 연결하더라도 동일한 게임 내 아이템을 다시 받을 수 없어야 합니다.
- 유저가 여러 개의 Twitch 계정을 사용하여 하나의 드롭스를 중복해서 획득할 수 없도록 해야 합니다 – 한 게임 계정에 이미 드롭스를 획득한 Twitch 계정이 있다면, 연결 해제하고 다른 Twitch 계정을 다시 연결하더라도 동일한 인게임 콘텐츠를 추가로 수령할 수 없어야 합니다.
- 드롭스는 양도할 수 없어야 합니다 – 본인의 Twitch 계정을 게임 계정에 연결한 유저는 이행 완료된 보상을 다른 게임 계정으로 이전할 수 없습니다(예: Steam 마켓플레이스, 다른 게임 계정으로 콘텐츠 이전).
위의 경우를 처리하려면 캠페인 ID + 보상 ID 페어링과 함께 Twitch 유저 ID 또는 게임 내 계정 ID와 관련된 드롭 지급 데이터를 저장하는 것이 좋습니다. 보상 ID는 여러 캠페인 ID에서 여러 번 사용할 수 있다는 점을 기억하세요.
계정 링크 제거하기
어떤 이유로든 언제든지 유저의 계정 링크를 종료할 수 있습니다. 계정 링크는 주로 귀사에서 직접 관리하므로 게임 계정 시스템 내에서 해당 연결을 제거해야 합니다.
또한 보안상의 이유로 OAuth 액세스 토큰을 폐기하는 것이 좋습니다. 유저 관점에서 Twitch 계정의 연결 표시를 제거할 수 있는 방법은 없습니다. 계정을 다시 연결하려면 유저가 Twitch에서 수동으로 연결을 해제해야 합니다.
드롭스 시스템 설계
Twitch에서는 드롭스 캠페인에 대한 정보를 수신하는 방법으로 Twitch API와 EventSub를 모두 활용할 수 있습니다. 이러한 시스템을 활용하는 방법은 기술적 관점에서 게임 인벤토리 시스템의 가용성에 따라 달라집니다.
설정할 수 있는 권장 드롭스 시스템은 세 가지가 있습니다:
- EventSub + Twitch API – 이 시스템을 사용하면 EventSub를 통해 자신의 웹 서버로 직접 드롭스 획득 자격에 대한 정보를 수신한 다음, 해당 자격이 충족되면 Twitch API를 사용하여 Twitch에 알릴 수 있습니다. 이 방법은 라이브 서비스 게임을 포함한 대부분의 경우에 가장 권장됩니다.
- Twitch API(호스팅 인벤토리) - 이 시스템을 사용하면 요청 시 드롭스 획득 자격에 대한 정보를 얻을 수 있지만, 자동으로 귀사 시스템에 알리지는 않습니다. 권장하지는 않지만 유저 요청에 따라 드롭스의 상태를 확인해야 하는 경우에 유용할 수 있습니다.
- Twitch API(오프라인 인벤토리) – 게임 내 아이템이 온라인으로 호스팅되지 않고, 드롭스 획득 권한이나 인벤토리 관리를 위해 온라인 서버에 액세스할 수 없는 게임은 게임 내에서 Twitch API에 액세스하여 드롭스 획득 권한 시스템을 처리해야 합니다.
어떤 것을 사용해야 할지 잘 모르겠다면, 대부분의 경우 EventSub + Twitch API 또는 Twitch API(오프라인 인벤토리 )를 사용하게 됩니다. 귀사가 운영하는 서버에서 획득 자격 전달 시스템을 처리하는 경우, EventSub + Twitch API 가이드를 따르세요. 게임의 획득 자격 시스템에서 서버에 액세스할 수 없는 경우 Twitch API(오프라인 인벤토리 ) 가이드를 따르세요.
EventSub + Twitch API
가장 일반적인 드롭스 시스템은 Twitch API 와 EventSub 를 모두 활용합니다. 이 시나리오에서는 EventSub 웹훅을 사용하여 드롭스 자격을 호스팅 중인 URL 엔드포인트로 푸시하고, 이를 통해 게임의 획득 자격 시스템을 활성화하여 게임 내에서 아이템을 전달합니다. 게임 내 아이템이 성공적으로 전달되면 Twitch API를 호출하여 보상 지급이 되었음을 Twitch 시스템에 등록합니다.
기술 세부 정보
아래 프로세스가 활성화되기 전에 유저는 계정 연결에 설명된 대로 Twitch 계정과 게임 계정을 연결한 것으로 간주합니다.

위 다이어그램에서는 다음과 같은 시스템이 구축됩니다:
- 획득 자격 시스템 – 들어오는 EventSub 웹훅을 수락하여 드롭스 획득 자격 부여 EventSub 페이로드를 전달하는 귀사 서비스입니다.
- EventSub – 유저에게 드롭스 보상 자격이 부여되면 웹훅 알림을 제공하는 Twitch의 EventSub 제품입니다.
- Twitch API - 드롭스 획득 자격 상태에 대한 정보를 업데이트하기 위해 호출하는 Twitch의 API입니다.
- 게임 유저 데이터베이스 - Twitch 유저 아이디와 게임 내 계정 시스템의 유저 식별자 사이의 연관성을 찾을 수 있는 모든 서비스입니다. 이 연결은 계정 연결 프로세스 중에 설정됩니다.
- 게임 내 인벤토리 - 인벤토리 시스템에 아이템을 지급할 수 있는 모든 서비스입니다.
EventSub 구독을 설정할 때 App Access Token 을 사용해야 합니다. API를 호출할 때 동일한 App Access Token을 사용하면 한 번에 많은 유저를 업데이트할 수 있으므로 권장합니다.
EventSub 설정
참고: 구현을 시작하기 전에 먼저 기술 FAQ를 읽고 드롭스 시스템을 구축하는 동안 발생하는 일반적인 질문과 문제를 검토하세요.
EventSub 구독 유형
Twitch의 EventSub 제품을 사용하면 구독 유형으로 정의된 실시간 이벤트를 구독할 수 있습니다. drop.entitlement.grant 구독 유형은 시청자에게 드롭스 획득 자격이 부여되면 알림을 전송합니다. 이 EventSub 주제에 관한 자세한 내용은 드롭스 획득 자격 부여 문서에서 확인할 수 있습니다.
EventSub 주제를 구독하려면 이벤트 구독하기의 단계를 따르세요. 이 특정 구독 유형에서는 조건에 organization_id를 포함해야 하며, 선택적으로 category_id 및 campaign_id를 포함할 수 있습니다. 대부분의 시나리오에서는 organization_id만 정의하면 되므로 다른 필드를 정의하면 해당 필드를 기준으로 필터링된 드롭스 알림만 전달됩니다.
또한 이 구독 유형을 사용하려면 EventSub 구독에 is_batching_enabled를 포함해야 합니다. 이는 대부분의 EventSub 구독과 달리 이 구독은 단일 알림에 여러 드롭스 이벤트를 포함할 수 있기 때문입니다.
구현
획득 자격 시스템 은 드롭스 통합의 핵심입니다. 이 시스템은 들어오는 EventSub 웹훅을 처리하고, 게임의 유저 데이터베이스 및 인벤토리 시스템과 통신한 뒤, 완료 시 Twitch API를 업데이트합니다.
위 차트에 설명된 대로 시스템에서 다음 작업을 완료해야 합니다:
드롭스 획득 자격 부여 수락
먼저, 한 명 이상의 유저가 드롭스 캠페인을 완료할 때마다 Twitch의 EventSub 시스템에서 알림을 전송합니다. EventSub 알림에서 이 형식의 드롭스 데이터가 포함된 배열을 볼 수 있습니다:
[
{
"id": "bf7c8577-e3e3-4881-a78a-e9446641d45d",
"data": {
"organization_id": "373c8318-78e7-4bc5-bf2f-7a1a48a1d7d4",
"category_id": "26936",
"category_name": "Music",
"campaign_id": "9003e09a399c-256e-11f0-8869-0a58a9feac02",
"user_id": "141981764",
"user_name": "TwitchDev",
"user_login": "twitchdev",
"entitlement_id": "WW91IGFyZW4ndCBzdXBwb3NlZCB0byBkZWNvZGUgdGhlc2UhIQ==",
"benefit_id": "your-custom-reward-id-ends-up-here",
"created_at": "2019-01-28T04:17:53.325Z"
}
},
...
]
여러 개의 획득 자격이 반환될 수 있으므로 하나의 EventSub 알림에 여러 명의 유저가 포함될 수 있습니다. 페이로드 배열의 모든 획득 자격을 스캔하고, 어떤 획득 자격이 어떤 유저에게 부여되는지 임시로 저장해야 합니다.
데이터베이스에서 유저 정보 가져오기
유저가 자신의 계정을 연결할 때, 유저의 Twitch 계정과 게임 계정을 연결하는 데이터베이스 항목이 있어야 합니다. 이 정보는 게임에서 드롭스 보상을 누구에게 지급해야 하는지 결정하는 데 필요합니다.
유저가 데이터베이스에 없는 경우 해당 유저가 아직 계정을 연결하지 않은 것입니다. 지금은 알림을 무시하고 나중에 처리해야 합니다. 캠페인 종료 후 최대 14일 동안 이 획득 자격을 처리할 의무가 있습니다.
게임 내 획득 자격을 부여하기 위한 정보를 게임으로 전달
이제 필요한 정보를 확보했으므로 benefit_id 와 게임 내 유저 ID 를 게임의 백엔드 서버로 전달할 수 있습니다. 그 후 계속 진행하기 전에 게임 내 아이템이 유저의 인벤토리에 제대로 지급되었는지 시스템에서 확인해야 합니다.
Twitch API를 호출하여 자격이 충족된 것으로 표시하기
Update Drops Entitlements API를 사용하여 획득 자격이 충족되었음을 Twitch에 알립니다. 이 컬 요청과 유사한 API를 호출할 수 있습니다:
curl -X PATCH 'https://api.twitch.tv/helix/entitlements/drops' \
-H 'Authorization: Bearer <Your OAuth token goes here>' \
-H 'Client-Id: <Your tokens associated Client ID goes here>' \
-H 'Content-Type: application/json' \
-d '{
"fulfillment_status": "FULFILLED",
"entitlement_ids": [
"U2VyaW91c2x5LCBkb24ndCB3b3JyeSBhYm91dCBkZWNvZGluZyB0aGVzZSE=",
"R28gcmVhZCB0aGUgVGVjaG5pY2FsIEZBUSBmb3IgbW9yZSBpbmZv"
]
}'
이 API 호출은 여러 유저에게 영향을 미칠 수 있으므로 App Access Token을 사용하여 이 호출을 수행해야 합니다. 페이로드 응답 예시를 포함하여 이 API에 대한 자세한 내용은 Update Drops Entitlements API를 참조하세요.
마무리
흔히 발생할 수 있는 사례는 계정이 연결되지 않은 경우입니다. 연결되지 않은 계정에 대한 알림이 발생하는 경우, 성공하거나 캠페인 종료 후 14일이 경과할 때까지 게임 내 아이템 지급을 다시 시도해야 합니다.
또한 이 구현은 EventSub가 정보를 푸시하는 것에 의존하며, 누락된 정보가 있는지 API를 확인하지 않습니다. EventSub가 실패한 알림 재전송을 시도하지만, 매우 드물게 알림이 전달되지 않을 수 있습니다. 이 문제를 해결하려면 Get Drops Entitlements API에서 CLAIMED에서 FULFILLED로 처리되지 않은 자격을 수동으로 검색할 수 있도록 준비하는 것이 좋습니다.
Twitch API(호스팅 인벤토리)
웹 서버를 호스팅하여 들어오는 EventSub 웹훅을 처리하고 싶지 않다면 대신 반복되는 간격으로 Twitch API를 호출하면 됩니다. 이 시나리오에서는 권장 간격인 5~15분 간격으로 Twitch API를 확인하여 유저에게 미지급 드롭스가 있는지 확인한 다음, 유저의 게임 계정으로 게임 내 아이템을 지급합니다. 게임 내 아이템이 성공적으로 지급되면, Twitch API를 호출하여 보상이 지급되었음을 Twitch 시스템에 등록합니다.
기술 세부 정보
아래 프로세스가 활성화되기 전에 유저는 계정 연결에 설명된 대로 Twitch 계정과 게임 계정을 연결한 것으로 간주합니다.

위 다이어그램에서는 다음과 같은 시스템이 구축됩니다:
- 획득 자격 시스템 – 들어오는 EventSub 웹훅을 수락하여 드롭스 획득 자격 부여 EventSub 페이로드를 전달하는 귀사 서비스입니다.
- Twitch API - 드롭스 획득 자격 목록을 가져오고 상태 정보를 업데이트하기 위해 호출하는 Twitch의 API입니다.
- 게임 유저 데이터베이스 - Twitch 유저 아이디와 게임 내 계정 시스템의 유저 식별자 사이의 연관성을 찾을 수 있는 모든 서비스입니다. 이 연결은 계정 연결 프로세스 중에 설정됩니다.
- 게임 내 인벤토리 - 인벤토리 시스템에 아이템을 지급할 수 있는 모든 서비스입니다.
이 설정에는 User Access Token 을 사용하는 것이 좋지만, 원하는 경우 App Access Token 을 사용할 수도 있습니다. User Access Token 을 사용하는 경우, 각 유저의 User Access Token을 사용하여 각 유저에 대해 개별적으로 Update Drop Entitlements 를 호출해야 합니다.
참고: 구현을 시작하기 전에 먼저 기술 FAQ를 읽고 드롭스 시스템을 구축하는 동안 발생하는 일반적인 질문과 문제를 검토하세요.
구현
획득 자격 시스템 은 드롭스 통합의 핵심입니다. 이 시스템은 다음 중 한 순간에 활성화됩니다:
- 5~15분마다 자동으로 실행됩니다.
- 웹사이트의 유저 상호작용과 같은 다른 시스템에 의해 활성화됩니다.
활성화되면 시스템은 Twitch API를 호출하여 충족되지 않은 모든 획득 자격 목록을 가져오고, 게임의 유저 데이터베이스 및 인벤토리 시스템과 통신하며, 완료되면 Twitch API를 업데이트합니다.
위 차트에 설명된 대로 시스템에서 다음 작업을 완료해야 합니다:
Twitch API를 호출하여 획득 자격 목록 불러오기
Get Drops Entitlements API를 사용하면 게임에 대한 모든 미이행 획득 자격에 대한 정보를 얻을 수 있습니다. 이 컬 요청과 유사한 API를 호출할 수 있습니다:
curl -H GET 'https://api.twitch.tv/helix/entitlements/drops?game_id=<Your game ID>&fulfillment_status=CLAIMED' \
-H 'Authorization: Bearer <Your OAuth token goes here>' \
-H 'Client-Id: <Your tokens associated Client ID goes here>'
User Access Token 을 사용하는 경우 API는 해당 유저에 대한 획득 자격만 반환합니다. App Access Token 을 사용하는 경우 쿼리 매개변수에 user_id를 별도로 지정하지 않는 한 API는 모든 사용자에 대한 획득 자격을 반환합니다.
데이터베이스에서 유저 정보 가져오기
유저가 자신의 계정을 연결할 때, 유저의 Twitch 계정과 게임 계정을 연결하는 데이터베이스 항목이 있어야 합니다. 이 정보는 게임에서 드롭스 보상을 누구에게 지급해야 하는지 결정하는 데 필요합니다.
유저가 데이터베이스에 없는 경우 해당 유저가 아직 계정을 연결하지 않은 것입니다. 지금은 알림을 무시하고 나중에 처리해야 합니다. 캠페인 종료 후 최대 14일 동안 이 획득 자격을 처리할 의무가 있습니다.
게임 내 획득 자격을 부여하기 위한 정보를 게임으로 전달
이제 필요한 정보를 확보했으므로 benefit_id 와 게임 내 유저 ID 를 게임의 백엔드 서버로 전달할 수 있습니다. 그 후 계속 진행하기 전에 게임 내 아이템이 유저의 인벤토리에 제대로 지급되었는지 시스템에서 확인해야 합니다.
Twitch API를 호출하여 자격이 충족된 것으로 표시하기
Update Drops Entitlements API를 사용하여 획득 자격이 충족되었음을 Twitch에 알립니다. 이 컬 요청과 유사한 API를 호출할 수 있습니다:
curl -X PATCH 'https://api.twitch.tv/helix/entitlements/drops' \
-H 'Authorization: Bearer <Your OAuth token goes here>' \
-H 'Client-Id: <Your tokens associated Client ID goes here>' \
-H 'Content-Type: application/json' \
-d '{
"fulfillment_status": "FULFILLED",
"entitlement_ids": [
"U2VyaW91c2x5LCBkb24ndCB3b3JyeSBhYm91dCBkZWNvZGluZyB0aGVzZSE=",
"R28gcmVhZCB0aGUgVGVjaG5pY2FsIEZBUSBmb3IgbW9yZSBpbmZv"
]
}'
User Access Token 을 사용하는 경우 토큰에 연결되지 않은 유저의 획득 자격 상태를 수정하려고 하면 API에서 오류를 반환합니다. App Access Token 을 사용하는 경우, 이 API 호출을 사용하여 클라이언트 ID 소유자가 속한 조직이 소유한 게임과 관련된 모든 획득 자격을 수정할 수 있습니다.
마무리
흔히 발생할 수 있는 사례는 계정이 연동되지 않은 경우입니다. 이러한 계정의 획득 자격은 유저가 조치를 취할 때까지 이행할 수 없음에도 불구하고 여전히 CLAIMED 상태로 표시됩니다. 획득 자격을 자동으로 처리하는 경우, 성공하거나 캠페인 종료 후 14일이 경과할 때까지 게임 내 아이템 지급을 다시 시도해야 합니다. 유저 상호작용을 처리하는 경우, 유저에게 계정 링크를 완료해야 드롭스 보상을 받을 수 있음을 알려주세요.
Twitch API(오프라인 인벤토리)
싱글 플레이어 게임과 같이 유저의 인벤토리를 호스팅할 필요가 없는 경우, 게임을 로컬로 호스팅할 수 있습니다.
계정 연결
이 시나리오의 계정 연결 프로세스는 OAuth 토큰을 로컬에 보유해야 하므로 약간 다릅니다. 게임이 완전히 오프라인 상태인 것으로 추정되므로 OAuth 연결을 처리하는 로컬 웹서버가 있어야 합니다.

위 다이어그램에서는 다음 시스템과 엔티티가 포함됩니다:
- 플레이어 – 게임을 플레이하는 유저입니다.
- 게임 – 로컬로 호스팅되는 HTTP 서버를 제외한 게임의 모든 시각적 요소와 백그라운드 동작을 포함합니다.
- 게임 호스트 HTTP 서버 - 게임이 백그라운드에서 시작하는 HTTP 서버입니다. 인증 리디렉션을 처리하는 데만 사용됩니다.
- Twitch - 유저가 계정을 게임에 연결할 수 있도록 리디렉션되는 대상인 Twitch입니다. 이 시스템에서 Twitch와 관련된 부분은 Twitch의 로그인 화면과 타사 애플리케이션 인증 화면입니다.
유저가 자신의 계정을 게임에 연결하려면 다음 작업이 수행됩니다:
- 플레이어 는 게임 설정 메뉴에서 “ Twitch와 연결 “ 버튼을 클릭합니다.
- 게임 백그라운드에서 로컬로 호스팅되는 HTTP 서버가 시작됩니다. 이 서버는 클라이언트 ID 가져오기 중에 설정한 클라이언트 ID의 리디렉션 URI에 정의된 것과 동일한 localhost 포트에서 호스팅되어야 합니다.
- 게임이 플레이어의 웹 브라우저를 열면 자동으로 Twitch의 인증 URL로 이동합니다. 어떠한 경우에도 게임 내에 클라이언트 ID의 클라이언트 시크릿을 포함해서는 안 되므로, Implicit Grant Flow에 정의된 URL을 사용해야 합니다.
- 유저가 Twitch에 로그인하고 애플리케이션을 승인하면 로컬 호스트 URL로 리디렉션되며, 해당 URL에 액세스 토큰이 포함됩니다.
- HTTP 서버는 이 요청을 수락하고 토큰을 로컬에 저장한 후, 유저에게 브라우저 창을 닫으라고 안내하는 HTML을 반환합니다.
- 게임 내에서 설정 메뉴 UI를 업데이트하여 유저에게 Twitch 계정이 성공적으로 연결되었음을 표시합니다.
참고: User Access Tokens는 수명이 짧으며, Implicit Grant Flow를 통해 제공되는 액세스 토큰에는 새로고침 토큰이 포함되지 않습니다. 따라서 게임 시작 시와 유저가 드롭스 확인을 시작할 때를 포함하여 가끔 토큰을 확인해야 합니다.
기술 세부 정보

위 다이어그램에서는 다음 시스템과 엔티티가 포함됩니다:
- 플레이어 – 게임을 플레이하는 유저입니다.
- 게임 - 게임 내 인벤토리 시스템을 제외한 게임의 모든 시각적 측면과 배경을 포괄하는 게임입니다.
- 게임 내 인벤토리 - 게임의 인벤토리 시스템 및 플레이어의 인벤토리를 변경할 수 있는 모든 관련 시스템입니다.
- Twitch API - 드롭스 획득 자격 목록을 가져오고 상태 정보를 업데이트하기 위해 호출하는 Twitch의 API입니다.
구현
이 시스템은 유저가 미이행 드롭스 보상 확인 요청을 수동으로 시작하면 시작됩니다. 이러한 요청은 일반적으로 게임 내 설정 UI의 드롭스 확인 버튼을 통해 이루어집니다. 활성화되면 시스템은 로컬에 저장된 OAuth 토큰의 유효성을 검사하고, Twitch API를 호출하여 충족되지 않은 모든 획득 자격 목록을 가져오고, 게임 인벤토리 시스템과 통신하고, 완료되면 Twitch API를 업데이트합니다.
위 차트에 설명된 대로 시스템에서 다음 작업을 완료해야 합니다:
저장된 OAuth 토큰을 검증합니다.
User Access Tokens는 수명이 짧으며, Implicit Grant Flow를 통해 제공되는 액세스 토큰에는 새로고침 토큰이 포함되어 있지 않습니다. 따라서 Twitch API를 호출하기 전에 토큰의 유효성을 검사해야 합니다. 또는 API 호출을 시도할 수 있으며, 토큰이 만료된 경우 HTTP 401 권한 없음 이 반환됩니다.
토큰이 만료된 경우 Twitch에 연결하기 버튼을 통해 유저에게 계정을 다시 연결하도록 안내해야 합니다.
Twitch API를 호출하여 획득 자격 목록 불러오기
Get Drops Entitlements API를 사용하면 게임에 대한 모든 미이행 획득 자격에 대한 정보를 얻을 수 있습니다. 이 컬 요청과 유사한 API를 호출할 수 있습니다:
curl -H GET 'https://api.twitch.tv/helix/entitlements/drops?game_id=<Your game ID>&fulfillment_status=CLAIMED' \
-H 'Authorization: Bearer <Your OAuth token goes here>' \
-H 'Client-Id: <Your tokens associated Client ID goes here>'
이 호출은 앞서 설명한 User Access Token 을 사용하여 수행해야 합니다. 게임을 플레이하는 유저에 대한 정보만 자동으로 반환합니다.
미이행 획득 자격이 있는지 확인합니다.
이 시스템에서 유저는 언제든지 드롭스 자격 확인을 시작할 수 있습니다. 따라서 충족해야 할 드롭스 획득 자격이 없을 수도 있습니다. 계속하기 전에 API 응답을 처리하고 충족해야 할 획득 자격이 있는지 확인합니다.
Twitch API를 호출하여 자격이 충족된 것으로 표시하기
Update Drops Entitlements API를 사용하여 획득 자격이 충족되었음을 Twitch에 알립니다. 이 컬 요청과 유사한 API를 호출할 수 있습니다:
curl -X PATCH 'https://api.twitch.tv/helix/entitlements/drops' \
-H 'Authorization: Bearer <Your OAuth token goes here>' \
-H 'Client-Id: <Your tokens associated Client ID goes here>' \
-H 'Content-Type: application/json' \
-d '{
"fulfillment_status": "FULFILLED",
"entitlement_ids": [
"U2VyaW91c2x5LCBkb24ndCB3b3JyeSBhYm91dCBkZWNvZGluZyB0aGVzZSE=",
"R28gcmVhZCB0aGUgVGVjaG5pY2FsIEZBUSBmb3IgbW9yZSBpbmZv"
]
}'
이 작업은 게임 내에서 아이템을 지급하기 전후에 모두 수행할 수 있지만, 게임 내에서 지급하기 전에 수행하면 인벤토리 시스템과의 일부 레이스 컨디션을 피할 수 있습니다. 이 호출의 목적은 유저가 게임 내 아이템을 여러 번 수령하는 것을 방지하기 위한 것입니다.
토큰 만료나 인터넷 연결 부족 등의 이유로 API 호출이 실패하면 플레이어에게 이 실패를 알리고 적절한 문제 해결 지침을 제공해야 합니다.
보상 아이템을 포함하도록 게임 내 인벤토리를 업데이트하세요.
이 시스템은 전적으로 게임 내에서 작동하므로 이제 게임 인벤토리를 호출하여 획득 자격과 관련된 보상 아이템을 포함하도록 업데이트할 수 있습니다.
플레이어에게 보상을 성공적으로 지급했음을 알립니다.
이제 플레이어는 게임으로 다시 리디렉션되어 받은 게임 내 아이템을 즐길 수 있습니다!
기술 FAQ
유저의 드롭스 수령 처리를 얼마나 오래 지원해야 하나요?
개발자는 캠페인 종료 후 최대 14일 동안 계정을 연결하고 보상을 청구한 시청자에게 보상을 전달해야 합니다. 시간 제한 베타처럼 시간의 구애를 받는 일부 캠페인의 경우 이러한 요건은 면제될 수 있습니다.
캠페인 종료 후에도 수령할 수 있나요?
네. 유저는 캠페인 기간 동안 드롭스를 받기 위한 요건을 충족해야 하지만, 캠페인 종료 후 최대 14일 동안은 계정을 연결하여 드롭스를 수령할 수 있습니다. 이 경우 EventSub 알림을 받을 수 있으며, Twitch API에서 제공한 데이터가 업데이트됩니다.
EventSub와 Twitch API에서 제공하는 ID의 최대 길이가 있나요?
ID는 불투명하고 변경될 수 있으므로 최대 길이는 정해져 있지 않습니다. 데이터베이스에서 최대 길이를 설정해야 한다면 유연성을 위해 255로 설정하는 것이 좋습니다.
보상 ID의 형식을 확인하거나 디코딩해야 하나요?
Twitch API와 EventSub에서 제공하는 드롭스와 관련된 ID는 불투명하며 해독할 경우 의미 없는 정보를 제공합니다. ID 형식은 언제든지 변경될 수 있으므로 예상되는 형식 (예: GUID 또는 Base64 )을 기준으로 ID의 유효성을 검사하지 마세요.
계정이 연결되기 전에 수령할 수 있나요?
네, 유저는 계정을 연결하기 전에 드롭스 보상을 수령할 수 있습니다. 이러한 경우 유저가 계정을 연결할 때까지, 유저가 계정을 연결했는지 주기적으로 확인해야 합니다. 캠페인 종료 후 최대 14일 동안만 필요하며, 그 이후에는 더 이상 보상을 받을 수 없습니다.
드롭스 획득 자격을 FULFILLED로 표시해야 하나요?
네. 드롭스 획득 자격이 성공적으로 충족되었는지 사후에 확인할 방법은 Twitch API로 표시하는 것 외에는 없습니다. 캠페인 기간 동안 EventSub 시스템이 다운되어 새로운 드롭스 획득 자격을 놓치는 경우가 드물게 발생할 수 있으므로 EventSub를 사용하는 시스템에서도 이렇게 하는 것이 유용합니다.
API 결과가 반환되는 방식에 순서가 있나요?
아니요. Get Drops Entitlement API는 반환 결과의 순서가 보장되지 않으며, 어떤 속성과도 무관한 순서로 결과를 반환할 수 있습니다. 지급 상태와 같은 특정 속성을 가진 획득 자격을 더 쉽게 검색하려면 API 호출 시 쿼리 매개 변수를 활용하세요.
유저가 계정 연결을 시도한 후 계정 연결이 표시되지 않는 이유는 무엇인가요?
드롭스 캠페인의 성공적인 계정 연결은 유저가 드롭스 설정에서 설정한 게임에 연결된 클라이언트 ID에 대해 성공적으로 인증하는지에 따라 결정됩니다. 드롭스 설정에서 설정한 클라이언트 ID가 앞서 계정 연결 섹션에서 설정한 “ Twitch에 연결 “ 링크와 동일한 클라이언트 ID로 설정되어 있는지 확인하세요.
참고: 드롭스 캠페인을 생성한 후 드롭스 설정에서 게임의 클라이언트 ID를 변경하는 경우, 새 캠페인을 생성하여 새로 할당된 게임의 클라이언트 ID와 동기화해야 합니다.