고급 설정
사용자 ID 설정
아이언소스 보상형 광고 유닛에서 유저 보상을 위해 서버간 콜백을 사용하는 경우, setUserID 메서드를 사용하여 각 사용자 별로 고유 식별자 (UserID)를 정의해야 합니다.
사용자 관련 데이터 손실을 방지하기위해서는, UserID는 초기화 요청 이전에 설정해야 합니다. 최대 64 자리의 숫자 및 영문자로 이루어진 고유한 식별 ID를 사용해 주세요.
LevelPlay.setUserId("UserID");
세그먼트 정의
아이언소스 SDK의 세그먼트 기능을 통해 특정 광고 시청자에 맞게 광고 제공방식을 쉽게 조정할 수 있습니다. 아이언소스 SDK가 사용자의 세그먼트를 분류하도록 하려면 레벨플레이 플랫폼 서버에 사용자들의 세부 정보를 전달하여야 합니다.
아이언소스 SDK에서는 사용자 구분을 위한 데이터 전송을 지원하기 위해 아래 세 가지 방식을 지원합니다:
- 기기 속성 정보: 아이언소스 SDK는 위치, 기기 모델, 기기 제조사, 앱 버전, OS 등과 같은 사용자의 기기에 존재하는 표준 파라미터들을 자동으로 수집합니다. 해당 데이터들은 별도로 송신하지 않아도 됩니다. (위치의 경우 도시 수준의 위치까지만 수집)
- 사용자 속성 정보: 생성일과 같은 포괄정 유저데이터(지원되는 전체 세그먼트 속성 및 설명 목록은 아래에 있는 항목을 참조)는 API를 통해서만 전달되어야 합니다. 아이언소스 SDK가 레벨플레이 플랫폼에서 정의된 세그먼트들에 기반해 다양한 사용자를 분류할 수 있도록 지침을 따라 유저 상세 정보를 보내주시면 됩니다.
- 커스텀 세그먼트: 유저 상세 정보들을 레벨플레이 서버에 보내지 않고 직접 커스텀 세그먼트를 생성하고 그 설정에 맞게 광고 조정할 수 있습니다.
이렇게 변경된 사항은 변경 이후 로딩되는 광고부터 적용되며, 광고 워터월의 동적조정을 위해 각각의 광고 유닛 로딩 전에 호출할 수 있습니다.
아이언소스 세그먼트에 대한 자세한 설명은 여기를 참고 부탁 드립니다.
사용자 속성 정보 전달하기
세그먼트 사용을 위해서는 레벨플레이 플랫폼에서 세그먼트 정보 정의가 완료된 후, 아이언소스 서버로 사용자 특징 정보를 보내야 합니다.
세그먼트의 기반이 될 속성을 정의하고 아이언소스 서버로 전달합니다. 아래 중 한 가지 방법으로 이 정보들을 전송할 수 있습니다:
- 사용자가 속한 세그먼트가 이미 알고 있는 세그먼트라면 아래와 같이 세그먼트 명칭을 지정합니다:
// Create segment object mLPSegment = new LevelPlaySegment(); mLPSegment.setSegmentName(name); LevelPlay.setSegment(mLPSegment);
// Create segment object mLPSegment = LevelPlaySegment() mLPSegment.segmentName = name LevelPlay.setSegment(mLPSegment)
- 유저 상세 정보를 전송합니다. 아이언소스는 API 상에서 사용자를 세그먼트로 분류하기 위해 설정할 수 있는 다양한 표준 사용자 속성을 제공합니다. 아래로 스크롤하여 지원되는 사용자 세그먼트 속성들을 확인하세요.
// Create segment object mLPSegment = new LevelPlaySegment(); // Set user's level mLPSegment.setLevel(level); // Set user creation date mLPSegment.setUserCreationDate(date); // Set user's total in-app purchases mLPSegment.setIAPTotal(iapt); // Set user's paying status mLPSegment.setPaying(isPaying);
// Create segment object mLPSegment = LevelPlaySegment() // Set user's level mLPSegment.level = level // Set user creation date mLPSegment.userCreationDate = date // Set user's total in-app purchases mLPSegment.iapTotal = iapt // Set user's paying status mLPSegment.isPaying = isPaying
또한, 세그먼트 당 5개의 커스텀 사용자 속성 설정이 가능합니다:
// Set custom parameters (up to 5) mLPSegment.setCustom(key,value);
// Set custom parameters (up to 5) mLPSegment.setCustom(key,value)
다음으로, 사용자 맞춤 경험을 위한 세그먼트 기반 광고 유닛 게재를 위해, 세그먼트 명칭이나 사용자 속성 중 하나로 아래의 함수 호출을 완료하세요:
지원되는 사용자 세그먼트의 속성
세그먼트 속성 | 타입 | 제약 | 설명 |
segmentName | String |
|
레벨플레이 계정 내에 정의된 세그먼트의 명칭 |
Paying | Boolean | True 또는 False |
|
iap_total | Double | 1-999999.99 | 사용자가 인앱결제에 사용한 총 금액량 |
userCreationDate | Long | 0 이상 | 유저가 앱을 설치한 날짜 (millisecond 단위) |
Custom Parameters | key=string, value=string |
|
아이언소스 서버에 보낼 추가 유저 데이터 |
커스텀 파라미터
레벨플레이 보상형 광고 유닛들은 광고가 성공적으로 종료된 후 유저에게 전달되어야 하는 보상 관련된 이벤트를 서버측에서 발송하는 기능을 지원합니다. 더 자세한 사항은 여기를 참고 부탁 드립니다.
서버 파라미터 이외에도 클라이언트를 통해 런타임 커스텀 파라미터를 공유할 수 있습니다. 이를 구현하려면 setMetadata API를 사용하여 LevelPlay_Rewarded_Server_Params에 커스텀 파라미터를 전달하기만 하면 됩니다. 커스텀 파라미터는 세션 전체에서 여러 번 업데이트되어 이전 값을 재정의할 수 있습니다.
커스텀 파라미터를 초기화하려면, LevelPlay_Rewarded_Server_Params 값에 빈 배열 값을 설정합니다.
구현 예제 코드
LevelPlay.setMetaData("LevelPlay_Rewarded_Server_Params", List.of("key1=value1", "key2=value2"));
LevelPlay.setMetaData("LevelPlay_Rewarded_Server_Params", listOf("key1=value1", "key2=value2"))
이렇게 설정하면 아래 예시와 같이 콜백에서 해당 내용에 대한 정보를 수신할 수 있게 됩니다.
http://www.mydomain.com/rewardsCallback?appUserId=[USER_ID]&rewards=[REWARDS]&eventId=[EVENT_ID]&itemName=[ITEM_NAME]&custom_key1=value1&custom_key2=value2
최저 한도 가격 설정
Floor Configuration API를 사용하면 특정 광고 유닛에 대한 최저 한도 가격을 설정할 수 있습니다. 각 사용자 별로 최저 한도 가격을 설정하면 타겟팅 효율성을 높이고, 지연 시간을 줄이며, 광고 실적을 최적화할 수 있습니다.
최저 한도 가격은 바늗시 광고 유닛 객체를 생성할 때 설정이 되어야 하며, 이후 해당 광고 유닛 객체의 모든 로드 동작에 반영됩니다.
Property | Type | Description |
Bid floor | double | The price in USD that defines the minimum eCPM applied to traditional instances and bidders. |
인터스티셜 광고 예제
// Define a price floor configuration
var adConfig = new LevelPlayInterstitialAd.Config.Builder()
.setBidFloor(1.23) // Set the price floor in USD
.build();
// Apply the configuration to an interstitial ad unit
var interstitialAd = new LevelPlayInterstitialAd("adUnitId", adConfig);
// Define a price floor configuration
val adConfig = LevelPlayInterstitialAd.Config.Builder()
.setBidFloor(1.23) // Set the price floor in USD
.build()
// Apply the configuration to an interstitial ad unit
val interstitialAd = LevelPlayInterstitialAd("adUnitId", adConfig)
인터스티셜 구현 예제 전체는 여기에서 확인하실 수 있습니다.
보상형 광고 예제
// Define a price floor configuration
val adConfig = LevelPlayRewardedAd.Config.Builder()
.setBidFloor(1.23) // Set the price floor in USD
.build()
// Apply the configuration to a rewarded ad unit
val rewardedAd = LevelPlayRewardedAd("adUnitId", adConfig)
// Define a price floor configuration
val adConfig = LevelPlayRewardedAd.Config.Builder()
.setBidFloor(1.23) // Set the price floor in USD
.build()
// Apply the configuration to a rewarded ad unit
val rewardedAd = LevelPlayRewardedAd("adUnitId", adConfig)
보상형 광고 구현 예제 전체는 여기에서 확인하실 수 있습니다.
배너 광고 예제
// Define a price floor configuration
var adConfig = new LevelPlayBannerAd.Config.Builder()
.setBidFloor(1.23) // Set the price floor in USD
.build();
// Apply the configuration to a banner ad unit
var bannerAd = new LevelPlayBannerAdView(context, "adUnitId", adConfig);
// Define a price floor configuration
val adConfig = LevelPlayBannerAdView.Config.Builder()
.setBidFloor(1.23) // Set the price floor in USD
.build()
// Apply the configuration to a banner ad unit
val bannerAd = LevelPlayBannerAdView(context, "adUnitId", adConfig)
배너 광고 구현 예제 전체는 여기에서 확인하실 수 있습니다.
아이언소스 SDK 에러 코드
아이언소스는 아이언소스 SDK 연동 상의 실패 사항에 대한 설명을 제공하기 위해 오류 피드백 메커니즘을 제공합니다. 문제가 발생했거나, 연동 중 일부분이 올바르게 완료되지 않은 경우 아래에 등재된 오류가 발생합니다.
ironSource Error 오브젝트에는 에러 코드와 메시지가 포함됩니다. 아래는 발생 가능한 에러들과 해당 기능에 따른 메시지 들입니다.
에러 코드 | 광고 유닛(유형) | 설명 |
508 | N/A |
|
509 | 인터스티셜 | 송출 실패: 송출할 광고가 없음 |
보상형 동영상 | ||
510 | 인터스티셜 | 로드 실패: 서버 응답 실패 로드 실패: 아답터 로딩 실패 |
520 | 인터스티셜 | 송출 실패: 인터넷 연결 없음 (ShouldTrackNetworkState가 활성화 되어 있는 상태) |
보상형 동영상 | 송출 실패: 인터넷 연결 없음 | |
524 | 인터스티셜 | 송출 실패: 플레이스먼트 %@가 설정된 광고 빈도 한도를 초과 송출 실패: 플레이스먼트 %@가 설정된 광고 빈도 한도를 초과 |
보상형 동영상 | ||
526 | 인터스티셜 | 송출 실패: 광고 유닛에 설정된 세션당 일일 광고 횟수 한도를 초과 |
보상형 동영상 | ||
604 | 배너 | 플레이스먼트 광고 송출 한도 초과로 인해 로드 불가 |
605 | 배너 | 배너 로딩 중 정의되지 예상치 못한 에러 발생 |
606 | 배너 | 최초 로드 요청 시 – 모든 네트워크에서 배너 제공이 불가능 |
1007 | 인터스티셜 | 광고 경매 실패: 경매 요청에 필요한 정보가 포함되어 있지 않음 |
보상형 동영상 | ||
1022 | 보상형 동영상 | 송출 실패: 다른 보상형 동영상 광고 재생중에 보상형 동영상 광고 재생할 수 없음 |
1023 | 보상형 동영상 | 송출 실패: 송출할 수 있는 광고가 없는 상태에서 광고 송출 API 호출 |
1035 | 인터스티셜 | 워터폴이 비어 있음 (광고 요청 가능 인스턴스 없음) |
1036 | 인터스티셜 | 송출 실패: 다른 인터스티셜 광고가 재생 중에 인터스티셜 광고 재생할 수 없음 |
1037 | 인터스티셜 | 로드 실패: 다른 인터스티셜 광고가 재생 중에 인터스티셜 로드할 수 없음. |
1039 | 인터스티셜 | 인터스티셜 송출 (Show) 호출 중 예외처리 사항 발생 |