기술 자료

지원

자체 관리형 재화

보상 콜백을 구성하고 서버에서 거래를 처리하여 자체 관리형 가상 재화로 탭조이 오퍼월을 설정합니다.
읽는 시간 3분최근 업데이트: 2일 전

자체 관리형 재화는 사용자의 재화를 자체 서버로 처리할 때 사용합니다. 이 방법을 사용하면 사용자의 재화를 더 세부적으로 제어할 수 있지만, 모든 사용자의 재화 금액을 저장하고 처리하는 백엔드 작업을 개발자가 완전히 담당해야 한다는 뜻이기도 합니다. getRealeBalance, awardReale, 또는 spendReale는 관리형 재화에서만 사용 가능합니다. 탭조이는 자체 관리형 재화에 대해 클라이언트 측/앱 측 알림을 제공하지 않습니다. 콜백 서버를 호출할 때 앱과 사용자에게 알리는 것은 귀사의 책임입니다. 자체 관리형 재화를 사용하려면 콜백 서버를 설정해야 합니다. 탭조이는 사용자에게 최대한 신속하게 보상을 제공하기 위해 노력하지만, 즉시 보상이 이루어질 것을 보장할 수는 없습니다. 사용자에게 보상이 지급되기까지 걸리는 시간은 여러 요인에 따라 달라집니다. 베스트 프랙티스로, 정기적으로 또는 앱 실행, 앱 재개, 레벨 사이, 동영상 광고 종료, 스토어 로드 전 등 특정 앱 이벤트 발생 후 업데이트된 잔액을 확인해야 합니다. 또한 사용자에게 오퍼 완료까지 시간이 소요될 수 있음을 알리는 것을 권장합니다.

콜백 URL

사용자가 오퍼 완료로 재화를 획득하면, 이 URL로 HTTP GET 요청을 수행합니다. 파라미터 형식은 다음과 같습니다.
<callback_url>?snuid=<user_id>&currency=<currency>&mac_address=<mac_address>//Examplehttp://www.sampledoman.com/payments/offers/tapjoy?&amp;snuid=42&amp;currency=50&amp;mac\_address=00-16-41-34-2C-A6
기본 요청 파라미터에는 snuid와 통화(사용자 계정에 추가할 재화 금액), 사용자의 Wi-Fi MAC 주소(사용 가능한 경우)가 포함됩니다.

서버 응답

탭조이 서버는 서버의
200
또는
403
응답을 기대합니다.

서버 응답

사례

200
  • 사용자에게 재화가 성공적으로 부여되었습니다.
403
  • 검증자 파라미터가 계산된 값과 일치하지 않습니다.
  • snuid 파라미터는 시스템에서 인식되지 않습니다.
  • 재시도해서는 안 되는 다른 오류가 발생했습니다.
탭조이 서버가 200 또는 403 이외의 응답을 수신할 경우 탭조이는 계속해서 재시도합니다. 탭조이는 약 5분 간격으로 4일 동안 콜백을 재시도합니다. 탭조이의 알고리즘은 서버 응답 시간이 5초를 초과할 경우 요청을 실패로 처리합니다.

부정 행위 감지 및 예방을 위한 선택적 파라미터

Dashboard > Monetize > Virtual Currency > Create/Edit에서 가상 재화 비밀 키에 액세스할 수 있습니다. 이 키는 애플리케이션 SDK 키와 다릅니다. 이 가상 재화 비밀 키를 사용하여 콜백에 서명합니다. 재화에 비밀 키(
secret_key=
)가 존재하는 경우, 콜백 요청에 다음 파라미터를 추가합니다.

파라미터

설명

참고

id
특정 재화를 표시하는 식별자로, 항상 고유합니다.
currency_id
가 아니라
request_id
를 나타냅니다.
verifier
ID, SNUID, 재화 및 비밀 키의 MD5 해시입니다.

항상 조심해야 할 부정 행위 시나리오

  • ID가 재사용되거나 검증자가 잘못된 경우, 해당 콜백 URL은 탭조이에서 전송된 것이 아니므로 사기로 간주해야 합니다.
  • 사용자 ID가 오직 정수만으로 구성되어 있다면, 사용자 ID가 조작되지 않았는지 확인하기 위한 간단한 검증을 수행할 것을 권장합니다. 예를 들어, 탭조이는 “001234”와 “1234”를 서로 다른 두 개의 사용자 ID로 간주하지만, 백엔드 서버 로직에서는 그렇지 않을 수 있습니다.

검증자

검증자는 ID, SNUID, 재화, 비밀 키를 콜론(:)으로 구분하여 MD5 해시를 계산하여 생성됩니다. Ruby 코드에서는 다음과 같습니다.
Digest::MD5.hexdigest("#{id}:#{snuid}:#{currency}:#{secret_key}")
서버는 검증자를 재계산하고 일치하지 않는 요청은 모두 거부해야 합니다. 검증자가 일치하지 않으면 서버는 403 Forbidden로 응답해야 합니다.

콜백 URL 개선

위에 나열된 콜백을 더 많은 정보와 보안으로 개선했습니다. 이 개선된 버전을 사용하시려면 세일즈 담당자나 지원팀에 문의하여 해당 콜백 버전을 활성화하는 데 도움을 받으시기 바랍니다. 사용자가 오퍼를 완료하여 재화를 획득하면, 제공하신 URL로 POST 요청을 수행합니다. 파라미터 형식은 다음과 같습니다.
{ "cp": "some_string", "currency": { "currency_sale": "1.0", "id": "reward_id", "reward": 100 }, "id": "some_id", "offer": { "advertiser_app_name": "a_cool_app", "currency": { "max_reward_value": 1360 }, "expires_at": 1768175428, "icon_url": "some_URL/icon.jpg", "name": "eye_catching_headline", "task":{ "is_iap": false, "name": "event_name" }, "type": "" }, "placement":{ "content_type": "offerwall", "name": "placement_name" }, "rev": 100, "timestamp": 1762993750, "user": { "id": "user_id" }}

파라미터

유형

설명

id
문자열이 요청에 대한 고유한 보상 ID
rev
더블획득한 USD 달러 수익
cp
문자열SDK를 통해 setCustomParameter 메서드로 전달된 커스텀 파라미터
currency.id
문자열이 재화의 고유한 식별자
currency.reward
integer사용자에게 보상되는 재화 금액
currency.currency_sale
플로트재화 세일 멀티플라이어(해당하는 경우)
currency.max_reward_value
integer사용자가 이 오퍼의 모든 작업을 완료하면 얻을 수 있는 최대 재화입니다.
offer.name
문자열광고주 오퍼의 이름
offer.type
문자열현재 지원되지 않음
offer.icon_url
문자열오퍼 URL 아이콘
offer.advertiser_app_name
문자열광고주 앱 이름
offer.task.name
문자열사용자가 보상을 받는 완료된 작업의 이름 또는 설명입니다.
offer.task.is\_iap
부울보상 이벤트가 IAP 이벤트를 위한 것일 경우 true입니다.
offer.expires_at
timestamp사용자가 더 이상 이 오퍼에 대한 보상을 받을 수 없는 타임스탬프(초)입니다.
placement.name
문자열이 전환과 관련된 플레이스먼트
placement.content_type
문자열사용되는 플레이스먼트 유형
user.id
문자열setUserID 메서드를 통해 SDK를 통해 전달되는 사용자 ID
timestamp
timestamp이 거래의 타임스탬프
JSON 본문은 먼저 재귀적으로 정렬된 후 SHA256 해싱 알고리즘을 사용하여 해시 처리됩니다. 증자는 POST 재화 콜백 요청 본문의 내용과 공유 비밀 키(탭조이 대시보드의 콜백 URL에서 확인 가능)를 기반으로 생성됩니다. 이 검증자는 POST 재화 콜백 요청 헤더에 포함되어 전송됩니다.
HMAC_SHA-256(<Request-Body>,<Secret-Key>)
서명이 있는 탭조이 헤더 예시:
X-Tapjoy-Signature => 7205ccfdfa1fe28cd05a1b56a9508d898cc938aa555a6c18848097fe4ee0975b

사용자 ID

자체 관리형 재화를 사용하는 경우 사용자 ID를 설정하는 것이 매우 중요합니다. 이 값은 콜백 URL에서
snuid
로 설정되는 값입니다. 콘텐츠 요청 전에 연결 시 connect 플래그를 사용하여 사용자 ID를 설정할 것을 권장합니다.
잘못 설정할 경우 사용자에게 보상이 지급되지 않으며 귀하도 수익을 얻지 못합니다. 사용자 ID는 고유한 사용자 ID(일반적으로 숫자)로 설정해야 합니다. 데이터 보안 및 GDPR 준수를 위해 setUserID 파라미터에는 사용자 이름, 실명, 이메일 주소 등 식별 가능한 정보가 포함되어서는 안 됩니다. 보안 및 사기 탐지를 위해 사용자 ID는 사용자의 생애 주기 동안 일관되게 유지되어야 합니다. (예를 들어, 사용자 레벨이나 점수 같은 정보를 전달하기 위해 사용자 ID 파라미터를 사용하지 마십시오.) 사용자 ID는 최대 190자로 구성할 수 있습니다. 아래의 플랫폼별 코드 샘플은 연결 플래그를 사용하는 방법과 필요한 경우 직접 (연결 후)
setUserID
API를 직접 호출하는 방법을 보여줍니다. API를 직접 호출할 때는 콜백을 사용하여 ID가 성공적으로 설정되었는지 확인합니다. 가능한 경우 연결 플래그 사용을 강력히 권장합니다.
// Recommended approach using connect flagNSDictionary *connectFlags = @{TJC_OPTION_USER_ID : @"<USER_ID_HERE>"};[Tapjoy connect:@"SDK_KEY_GOES_HERE" options:connectFlags];// Setting the user id directly[Tapjoy setUserIDWithCompletion:@"<USER_ID_HERE>" completion:^(BOOL success, NSError *error) {}];
iOS, Android, UnityReact Native에 대한 추가 예제는 빠른 시작 페이지에서 확인할 수 있습니다. 문제 해결 setUserID를 호출했는데 콜백 URL의 snuid 값이 예상과 다를 경우, 사용자가 인앱 오퍼월이나 tapjoy.com으로 이동하여 오퍼를 완료하기 전에 setUserID를 호출해야 합니다. 탭조이는 디바이스에 연결된 userID가 없을 경우 콜백 URL에 snuid로 디바이스 ID를 전송합니다. 예를 들어, 사용자가 앱을 실행한 후 앱이 사용자 ID를 전송하기 전에 tapjoy.com으로 이동할 수 있습니다. 이를 방지하려면 연결 호출 후 모든 실행 시 setUserID가 호출되도록 해야 합니다. 사용자 ID를 설정하지 않은 경우 시스템은 사용 가능한 최적의 디바이스 ID를 사용하려 시도합니다. 대부분의 경우 이는 디바이스의 광고 ID입니다. 그러나 SDK 버전, 디바이스 모델/버전, 디바이스 OS 버전 및 Google Play 서비스에 따라 정확한 ID는 달라질 수 있습니다. 다른 가능한 값으로는 Android ID, udid, mac_address 등이 있습니다.

사용자 잔액 설정

플레이스먼트 요청 시마다 탭조이에 사용자의 현재 잔액을 알려줄 수 있습니다. 플레이스먼트 콘텐츠를 요청하기 전에 반드시 이 값을 설정해야 합니다.
TJPlacement *placement = [TJPlacement placementWithName:@"placementName" delegate:nil]; [placement setBalance:100 forCurrencyId:@"1234" withCompletion:^(NSError * _Nullable error) { if (error != nil) { //Failure NSString *message = error.localizedDescription; } else { //Success } }];

필수 금액

잔액을 설정하면 플레이스먼트 시 필요한 금액 값도 설정할 수 있습니다.
TJPlacement* placement = [TJPlacement placementWithName:@"placementName" delegate:nil]; placement setRequiredAmount:100 forCurrencyId:@"1234" withCompletion:^(NSError * _Nullable error) { if (error != nil) { //Failure NSString *message = error.localizedDescription; } else { //Success } } ``` </Tab><Tab title="iOS (Swift)"> ```swift let placement = TJPlacement(name: "placementName", delegate: nil) placement?.setRequiredAmount(100, forCurrencyId: "1234", withCompletion: { error in if let error = error { //Failure let message = error.localizedDescription } else { //Success } })

보상 콜백 IP 화이트리스트

보상 콜백 서버에 접근 권한(화이트리스트)이 필요한 경우, 다음은 탭조이의 IP 목록입니다. (마지막 수정: 2024년 5월 12일)
18.215.207.8918.235.142.16523.20.255.11323.23.134.1653.210.188.323.215.42.1403.217.209.1773.218.95.353.219.236.533.231.137.161

탭조이 관리형에서 자체 관리형으로 전환

앱을 아직 출시하지 않은 경우, 탭조이 대시보드의 Edit Virtual Currency 화면에서 탭조이 관리형 재화를 자체 관리형 재화로 전환할 수 있습니다. 콜백 URL 필드에 올바른 형식의 URL을 입력해야 합니다. 그렇지 않으면 변경 사항이 실제로 적용되지 않습니다. 탭조이가 관리하는 재화를 사용하는 출시된 앱의 경우 전환 과정이 더 복잡합니다. 다음은 고려해야 할 몇 가지 사항입니다.
  • 새 SDK 키로 새 앱을 생성해야 합니다. 이렇게 하면 최신 버전으로 업그레이드하지 않은 이전 버전 앱 사용자에게 영향을 미치지 않습니다. 셀프 관리형 재화 버전의 앱에 동일한 SDK 키를 사용하면, 탭조이 관리형 재화 버전의 모든 사용자가 오퍼 완료 시 보상을 받지 못하게 됩니다.
  • 기존 앱 ID를 참조하는 모든 광고 캠페인을 비활성화하고, 새 앱 ID를 참고하도록 광고 캠페인을 재구성해야 합니다.
  • 자체 관리형으로 전환하려면 앱에서 코드를 변경해야 합니다. getCurrencyBalance, awardCurrency, spendCurrency는 관리형 재화에서만 사용 가능하므로 사용할 수 없습니다.
  • 변경을 고려하기 전에 세일즈 담당자에게 문의하는 것이 좋습니다.
  • 자체 관리형 재화에서 탭조이 관리형 재화로의 전환은 불가능합니다. 변경을 진행하기 전에 반드시 전환 의사를 확인하시기 바랍니다.
사용자 잔액 이전을 위해 다음 단계를 따라야 합니다.
  1. 첫 실행 시 기존 SDK 키(탭조이 관리형 재화 사용)로 getCurrencyBalance 호출하여 잔액을 조회합니다.
  2. getCurrencyBalance에서 반환된 값으로 잔액을 업데이트합니다.
  3. 이후 모든 실행에서는 새 SDK 키를 사용합니다.
자체 관리형으로 전환을 고려 중이지만 자체 가상 재화 서버 구현 방법을 모르시는 경우, Parse 또는 UrbanAirship의 솔루션을 확인해 보시길 권장합니다.