퍼블리셔 예시

1. 인증 테스트

현재의 인증 내역을 테스트하기 위해서는 아래의 간단한 쿼리를 통해 테스트하실 수 있습니다. 이 쿼리를 통해 퍼블리셔 계정 내 3개의 앱에 대한 간단한 정보를 확인하실 수 있습니다.

query apps {
  publisher {
    apps(first: 3) {
      nodes {
        id
        name
        sdkApiKey
        realWorldCurrency
        timezone        
      }
    }
  }
}

2. 앱 생성하기

만약 대시보드 내 앱을 생성하지 않았다면 API를 통해 수익화를 위한 앱을 생성할 수 있습니다.

만약 앱이 구글 플레이 및 앱스토어에 출시되지 않았다러도 걱정하실 필요는 없습니다. storeUrl파라미터를 포함한 orientation 와 같은 파라미터는 선택 사항입니다.

mutation createPublisherAppWithStoreUrl {
  createPublisherApp(input: {
    name: "App Created With Store URL",
    platform: ANDROID,
    storeUrl: "https://play.google.com/store/apps/details?id=com.tapjoy.tapout&gl=us",
    orientation: PORTRAIT
  }) {
    app {
      id
      name
      timezone
      realWorldCurrency
    }
  }
}

mutation createPublisherAppWithoutStoreUrl {
  createPublisherApp(input: {
    name: "App Created WithOUT Store URL",
    platform: ANDROID,
    orientation: PORTRAIT,
    currency: KRW,
    timezone: TOKYO_SEOUL
  }) {
    app {
      id
      name
	  timezone
      realWorldCurrency
    }
  }
}

3. 가상화폐 생성하기

Tapjoy를 통한 수익화를 위해서는 사상화폐를 생성해야 합니다. 앱과 가상화폐는 다양한 방식으로 연결할 수 있으나 최소 한개의 가상화폐는 필요합니다.

가상화폐는 광고에 매우 중요한 영향을 끼칩니다. - 앱 내에 노출하기에 적합한 광고 콘텐츠의 수위를 결정합니다. 여러분의 어카운트 매니저는 앱의 수위 등급에 대한 답변을 줄 수 있으나, 일반적으로 가상화폐의 수위 등급은 앱의 플랫폼 수위 등급과 비슷하게 설정함으로써 높은 eCPM과 적합한 광고 컨텐츠를 사용자아게 노출시킬 수 있습니다.

만약 사용자에게 가상화폐가 노출되지 않는다면, app ID, 가상화폐 이름, 교환 비율, 앱 등급 설정하시면 됩니다. 만약 교환 비율에 필요 없다면 단순히 100 기본값을 입력해 주시길 바랍니다. (참고 자료: 가상 화폐)

mutation createCurrency {
  createCurrency(input: {
    appId: "<PASTE_YOUR_APP_ID_HERE>",
    name: "New Virtual Currency",
    exchangeRate: 100,
    maturity: MEDIUM
  }) {
    currency {
      id
      name
      exchangeRate
      initialBalance
      maturity
    }
  }
}

추가로 API 를 통해 기존 가상화폐를 수정할 수 있습니다.

mutation updateCurrency {
  updateCurrency(input: {
    id: "<CURRENCY_ID>",
    maturity: HIGH,
    name: "Shell Bells",
    initialBalance: 100
  }) {
    currency {
      id
      name
      exchangeRate
      initialBalance
      maturity
      callbackUrl
    }
  }
}

4. 플레이스먼트와 콘텐츠 생성하기

다음으로, 한개이상으로 플레이스먼트를 생성합니다. 플레이스먼트 는 앱 내 Tapjoy의 콘텐츠를 표시하기 위한 영역입니다. API 를 통해 플레이스먼트를 생성하였다면 모든 플레이스먼트 에 노출할 콘텐츠를 생성하실 수 있습니다.

콘텐츠는 eCPM 설정과 함께 어떤 타입의 광고를 보여줄지 결정합니다. 예를 들어 콘첸트 타입을 건너뛰기를 할 수 없는 REWARDED_VIDEO로 설정과 함께 각 국가별 eCPM을 설정할 수 있습니다. (현재 API 상 eCPM 은 HARD 만 설정할 수 있습니다.)

Content types

이름 건너뛰기? 리워드? 프로그매틱?
PROGRAMMATIC_REWARDED_VIDEO 아니오
PROGRAMMATIC_INTERSTITIAL_VIDEO 아니오
REWARDED_VIDEO 아니오 아니오
INTERSTITIAL_VIDEO 아니오 아니오

CPM 겂운 USD 로 설정합니다. 만약 5.5 로 설정하였다면 $5.50 로 세팅 됩니다.

eCPM은 프로그매틱 콘텐츠에는 적용할 수 없습니다.

국가코드 XX 는 "나머지 국가" 를 설정할 용도로 사용합니다. 만약 XX 만 eCPM 이 설정되어 있다면 이는 모든 국가에 적용됩니다. 만약 다른 국가 코드가 설정되어 있다면 XX 는 설정된 국가 이외의 국가에만 적용 됩니다.

mutation createPlacementAndContent {
  createPlacementsAndContents(input: {entries: [
    {
      appId: "<PASTE_YOUR_APP_ID_HERE>",
      placementName: "Placement from API",
      contentType: REWARDED_VIDEO,
      ecpmSettingsToAdd: [
        { price: 5.5, country: "US" },
        { price: 6.5, country: "KR", cpmFloorType: HARD },
        { price: 7.5, country: "JP", cpmFloorType: HARD },
        { price: 7.5, country: "CA", cpmFloorType: HARD }
      ]
    }
  ]}) {
    placements {
      id
      name
      description
      contents {
        id
        name
        type
        isSkippable
        ecpmSettings {
          price
          country
          cpmFloorType
        }
      }
    }
  }
}

placement.id 와 content.id 는 이후에 사용 됩니다.

5. eCPM 관리

eCPM을 포함한 콘텐츠 내 다양한 설정을 쉽게 업데이트 할 수 있습니다.

예를 들어 만약 이탈리아의 eCPM 설정을 제거하고 일본의 eCPM 설정을 $14 로 올린다고 가정해 봅시다.

mutation updatePlacementAndContent {
  updatePlacementsAndContents(input: { entries: [
    {
      placementId: "<PLACEMENT ID>",
      contentId: "<CONTENT CARD ID>",
      ecpmSettingsToUpdate: [
        {country: "JP", price: 14.0}
      ],
      ecpmSettingsToDelete: [
        {country: "IT"}
      ]
    }
  ]}) {
    placements {
      id
      contents {
        id
        ecpmSettings {
          price
          country
        }
      }
    }
  }
}

추가로 아래와 같이 쉽게 eCPM 설정을 추가할 수 있습니다.

mutation updatePlacementAndContent {
  updatePlacementsAndContents(input: { entries: [
    {
      placementId: "<PLACEMENT ID>",
      contentId: "<CONTENT CARD ID>",
      ecpmSettingsToAdd: [
        {country: "ES", price: 7.0}
      ]
    }
  ]}) {
    placements {
      id
      contents {
        id
        ecpmSettings {
          price
          country
        }
      }
    }
  }
}

6. 에러 핸들링

API는 잘못된 값을 입력하거나, 검증 실패 등 다양한 이유로 에러를 리턴합니다.

Tapjoy’s Publisher API is atomic. 이는 하나의 쿼리에서 여러개의 액션을 설정할 경우, 특정 단계에서 실패를 한다면 모든 쿼리가 실패로 돌아갈 것입니다. 예를 들어 eCPM 설정을 4개의 콘텐츠에서 진행시 하나의 ID 값이 잘못되었을 경우 해당 쿼리에 설정된 모든 설정이 변경되지 않고 실패하게 됩니다.

7. 앱 상태

만약 앱의 현재 상태를 보고자 하신다면 아래의 쿼리를 통해 확인하실 수 있습니다.

query placements {
  publisher {
    placements(appId: "<APP_ID>") {
      id
      name
      contents {
        id
        name
        type
        currencyId
        isSkippable
        ecpmSettings {
          price
          country
          cpmFloorType
        }
      }
    }
  }
}