Table of Contents | ||||||
---|---|---|---|---|---|---|
|
개요
BuzzScreen Android용 SDK는 모바일 기기의 첫 화면을 광고 인벤토리로 활용할 수 있도록 사용자에게 리워드를 지급하는 보상형 광고, 비보상형 광고, 뉴스 기사 등의 콘텐츠를 게시하여 앱의 수익화를 지원하는 잠금화면 앱 전용 SDK입니다.
...
Drawio | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
시작하기 전에
안내 사항
이 가이드는 BuzzScreen Android용 SDK를 앱에 연동하기 위한 정보를 제공합니다. 아래의 안내 사항을 숙지한 후 연동을 진행하세요.
...
Warning |
---|
반드시 잠금화면을 통한 수익 창출에 대한 구글 정책을 확인한 후 연동을 진행하세요. Android 14 이후 앱 제출 시 포그라운드 서비스(FGS) 알림 유형 선언 방법을 작성해야 합니다. 자세한 내용은 Android 14 대응 가이드를 참고하세요. |
Tip |
---|
|
요구 사양
Android 4.0.3 Jellybean (API 레벨 15) 이상
Android Studio 3.2 이상
Gradle 4.0.1 이상
compileSdkVersion 31 이상
AndroidX
JDK 1.11
Kotlin 버전 1.5 이상
...
Expand | |||||
---|---|---|---|---|---|
| |||||
Lockscreen Activity의 특정한 style 설정이 Android OS 8.0 버전에서 크래시가 발생할 수 있으므로 확인이 필요합니다.
|
준비 사항
항목 | 설명 | 비고 | |
---|---|---|---|
1 | 연동 앱 로그인을 위한 API 서버 | BuzzScreen SDK에 사용자 정보를 등록하기 위한 API입니다. | |
2 | 포인트 적립 요청 수신 API | 버즈빌 서버에서 포인트 적립 요청을 보낸 이후, 실제 포인트 지급을 처리할 매체사 API 서버입니다. | |
3 | 연동을 위한 키 값 | 버즈빌 BD 매니저로부터 발급받은
|
BuzzScreen 연동하기
1 단계. build.gradle
, AndroidManifest.xml
설정
1. build.gradle
에 아래 코드에 보이는 저장소 및 디펜던시를 추가하세요.
...
Code Block | ||
---|---|---|
| ||
android { compileSdkVersion 34 defaultConfig { targetSdkVersion 34 } } |
2 단계. 애드 네트워크 연동
버즈빌 BD 매니저가 애드 네트워크 추가 연동에 대한 안내를 진행합니다. ADN 추가 연동 가이드를 참조하여 모듈 레벨의 AndroidManifest.xml
에 해당 AdNetwork의 관련 코드를 추가하세요.
3 단계. 메소드 호출
연동을 위해 초기화, 사용자 정보 설정, 잠금화면 제어 설정을 순서대로 진행하세요.
1) 초기화: init()
및 launch()
호출
항목 | 코드 | 호출 위치 | 설명 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
버즈스크린 초기화
|
|
|
| ||||||||
버즈스크린 시작
|
| 앱 실행 시 처음 실행되는 액티비티에 추가하세요. | - |
...
Code Block | ||
---|---|---|
| ||
public class App extends Application { @Override public void onCreate() { super.onCreate(); // BuzzScreen 초기화 BuzzScreen.init("Unit ID", this, SimpleLockerActivity.class, R.drawable.image_on_fail); } } public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 앱 실행시 처음 실행되는 액티비티에 추가합니다. BuzzScreen.getInstance().launch(); } } |
2) 사용자 정보 설정
Note |
---|
연령, 성별, 지역 등 사용자 정보를 설정하지 않는 경우 타겟팅이 설정된 광고가 보이지 않으므로, 사용자가 볼 수 있는 전체 광고의 수량이 줄어들게 됩니다. 사용자 정보 설정이 불가능한 경우 BD 매니저와 사전에 논의하시기 바랍니다. |
...
Code Block | ||
---|---|---|
| ||
// 사용자 정보를 등록하는 코드입니다. com.buzzvil.buzzscreen.sdk.UserProfile userProfile = BuzzScreen.getInstance().getUserProfile(); userProfile.setUserId("USER_ID"); userProfile.setBirthYear(1985); userProfile.setGender(UserProfile.USER_GENDER_MALE); userProfile.setRegion("서울특별시 관악구"); |
3) 잠금화면 제어 설정
항목 | 코드 | 호출 위치 | 설명 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
다른 앱 위에 표시 권한 획득
|
| 버즈스크린 활성화 시점 |
| |||||||||
버즈스크린 활성화
|
| 버즈스크린 활성화 시점
| 이 함수가 호출된 이후부터 잠금화면에 버즈스크린이 나타납니다.
| |||||||||
버즈스크린 비활성화
|
| 버즈스크린 비활성화 시점 | 이 함수가 호출되면 더 이상 잠금화면에 버즈스크린이 나타나지 않습니다. | |||||||||
사용자 로그아웃
|
| 사용자가 로그아웃하는 시점 | 이 함수는 | |||||||||
버즈스크린이 화면에서 사라지는 시간 설정
|
|
| 버즈스크린 액티비티가 화면에 뜬 뒤 일정 시간 동안 유저의 활동이 없을 경우 버즈스크린이 화면에서 사라집니다.
| |||||||||
잠금화면을 활성화한 후 실제로 잠금화면이 처음 준비가 된 시점 확인
|
| 활성화한 후 실제로 잠금화면이 처음 준비가 완료된 시점을 알고 싶을 때, 아래의 interface를 구현하여
| ||||||||||
Notification 커스텀
| 서비스 노티피케이션 문서 참고 | 버즈스크린을 활성화한 후 알림 패널에 생성된 알림의 icon, text 등을 수정하고자 하는 경우 |
4 단계. 다른 앱 위에 표시 권한 획득하기
Android 10부터 변경된 정책에 따라, 잠금화면을 띄우기 위해서는 다른 앱 위에 표시 권한을 획득해야 합니다. 이에 따라 BuzzScreen Android용 SDK는 사용자에게 해당 권한을 요청하는 메시지를 잠금화면과 인앱(In-App)에 노출해 권한 획득 지원 기능을 제공합니다.
Warning |
---|
Android 12부터는 다른 앱 위에 표시 권한을 획득하지 않으면 아래의 문제가 발생할 수 있습니다.
|
1) 인앱 안내 메시지
...
boolean BuzzScreen#showOverlayPermissionGuideDialogIfNeeded(OverlayPermissionListener listener)
사용자에게 “다른 앱 위에 그리기” 권한 획득을 요청하는 메시지의 팝업 다이얼로그를 띄우는 인터페이스입니다.
앱의 메인 화면이 생성될 때(
MainActivity
의OnCreate()
) 해당 팝업을 보여주는 것을 권장합니다.리턴 값은 팝업 다이얼로그가 발생했는지 아닌지를 알려주는 boolean 값입니다.
인자로 주어진 listener를 통해 권한 획득 여부를 알 수 있습니다.
...
팝업에서
확인
클릭 시 해당 권한을 획득할 수 있는 안드로이드 설정 화면으로 이동하고, 권한 획득시 자동으로 이전 화면으로 전환Android 10 미만이거나 해당 권한이 이미 획득되어 있는 경우에는 팝업을 보여주지 않음
2) 잠금화면 안내 메시지
...
앱에서 추가 코드를 작성할 필요없이 자동으로 적용
Android 10 미만이거나 해당 권한이 이미 획득되어 있는 경우에는 팝업을 보여주지 않음
6시간 간격으로 노출
5 단계. 기본 보안 기능 화면 속성 수정
BuzzScreen.init()
된 직후 메소드를 호출하여 보안 기능 화면 속성을 수정하세요.
...
Code Block | ||
---|---|---|
| ||
BuzzScreen.init("app_key", this, SimpleLockerActivity.class, R.drawable.image_on_fail, Constants.useGDPR ? BuzzScreen.PrivacyPolicy.GDPR : BuzzScreen.PrivacyPolicy.NONE); BuzzScreen.getInstance().setSecurityConfiguration( new SecurityConfiguration.Builder(). backgroundResourceId(R.drawable.your_drawable). backgroundImageScaleType(ImageView.ScaleType.FIT_CENTER). backgroundColor(Color.WHITE). backgroundDimAlpha(0.7f). showClock(true). showDescription(true). build()); |
6 단계. 포인트 적립 포스트백 연동(Server-to-Server 연동)
버즈스크린은 포인트 적립이 발생했을 때 직접 사용자들에게 포인트를 지급하는 것이 아닙니다. 버즈스크린 서버에서는 매체사 서버로 포인트 적립 요청을 보낼 뿐이며, 실제 지급은 매체사 서버에서 처리합니다.
...
포인트 적립 알림 푸시를 사용자에게 보내고 싶은 경우에는 포인트 적립 요청을 받고 매체사에서 직접 푸시를 전송합니다.
포인트 적립 요청 흐름
Inc drawio | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
버즈배너(BuzzBanner)
버즈배너(BuzzBanner)는 BuzzScreen SDK 4.15.x부터 버즈스크린 화면 아래에 비보상 노출형 광고를 노출하는 배너 타입의 지면입니다. 버즈빌에서 기본 UI를 제공하는 SimpleLockerActivity
, 자유롭게 UI를 커스터마이징할 수 있는 LockerActivity
를 제공합니다.
준비 사항
버즈배너를 연동하려면 연동하려는 앱의 고유 식별자(App ID)와 광고 지면의 고유 식별자(Unit ID)가 필요합니다. ID를 발급받으려면 버즈빌 담당자에게 연락하세요.
ID 유형 | 설명 |
---|---|
BuzzBannerAppID | 앱을 구분하게 하는 고유 App ID 입니다. |
BuzzBannerSecret | 앱을 구분하게 하는 고유 App Secret 입니다. |
PlacementID | 각 광고 지면을 구분하게 하는 고유 ID 입니다. 배너의 사이즈와 PlacementID 가 제대로 매칭되어야 광고 할당 및 노출이 정상적으로 이루어집니다. |
BuzzBanner 초기화
BuzzScreen을 초기화한 다음 바로 BuzzBanner를 초기화할 수 있습니다. 다음의 절차를 따르세요. .
...
사이즈 | Enum |
---|---|
Banner 320 x 50 |
|
Banner 320 x 100 |
|
SimpleLockerActivity 사용하기
BuzzBannerConfig
를 설정하면 자동으로 SimpleLockerActivity
아래에 BuzzBanner가 추가됩니다.
커스텀 LockerActivity 사용하기
1. xml 파일의 원하는 위치에 BuzzBannerView
를 추가합니다.
...
Code Block | ||
---|---|---|
| ||
// BuzzBannerViewLisetner.java interface BuzzBannerViewListener { public void onLoaded() public void onFailed(AdError adError) public void onClicked() } |
ADN 추가 연동
BuzzBanner 의 매출 극대화를 위해 추가 연동 가능한 Ad Network 연동 가이드입니다.
...
ADN
| 버전 정보 | maven 저장소 | build.gradle(implementation) | ||||
---|---|---|---|---|---|---|---|
Adfit(Kakao) | 3.12.7 |
|
| ||||
Cauly | 3.5.22 |
|
| ||||
Mobon | 1.0.0.54 |
|
| ||||
Pangle | 4.7.1.4 |
|
| ||||
UnityAds | 4.3.0 |
|
| ||||
Vungle | 6.11.0 |
|
| ||||
Coupang | 1.2.8 |
|
쿠팡 SDK 1.2.1 버전이 포함되어 있습니다. | ||||
AppLovin(11.3.3) | 1.2.8 |
|
AppLovin SDK 11.3.3 버전이 포함되어 있습니다.
|
한줄뉴스(BuzzHeadlineNews)
한줄뉴스(BuzzHeadlineNews)는 BuzzScreen 4.31.x 부터 버즈스크린에 노출되는 비보상 콘텐츠입니다.
Tip |
---|
한줄뉴스의 매출 최적화를 위한 사전 세팅을 할 수 있도록, 반드시 버즈빌 담당자에게 연락하여 연동 계획을 공유해 주시기 바랍니다. |
...
SimpleLockerActivity 사용하기
버즈빌에서 제공하는 SimpleLockerActivity
, SimpleSlidingLockerActivity
사용 시에는 별도의 연동 과정 없이 자동으로 잠금화면 하단에 한줄뉴스가 나타납니다.
커스텀 LockerActivity 사용하기
Note |
---|
유의사항 한줄뉴스의 위치는 자유롭게 설정이 가능하나, 화면의 상단 기준 630px 이내 또는 하단 기준 630px 이내에 배치하는 것을 권장합니다. 해당 영역을 벗어나게 되면 광고가 가려질 수 있습니다. |
...
Code Block | ||
---|---|---|
| ||
// CustomLockerActivity.java public class CustomLockerActivity extends BaseLockerActivity { ... BuzzHeadlineNewsView buzzHeadlineNewsView; ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_custom_locker); ... buzzHeadlineNewsView = findViewById(R.id.buzzHeadlineNewsView); bindBuzzHeadlineNews(buzzHeadlineNewsView); ... } } |
버즈캐시버튼 (BuzzCashButton)
버즈캐시버튼(BuzzCashButton)은 BuzzScreen 5.7.x 부터 버즈스크린에 노출되는 추가 수익 기능입니다.
...
Tip |
---|
버즈캐시버튼 노출을 위한 사전 세팅이 필요하여, 반드시 버즈빌 담당자에게 연락하여 연동 계획을 공유해 주시기 바랍니다. |
종속성 추가
프로젝트의 build.gradle 파일
우선 프로젝트의 build.gradle
파일에 버즈캐시버튼을 위한 저장소를 추가해야 합니다.
Code Block |
---|
allprojects { repositories { google() mavenCentral() maven { url "https://jitpack.io" } maven { url 'https://dl.buzzvil.com/public/maven' } maven { url 'https://artifact.bytedance.com/repository/pangle' } maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' } maven { url 'https://raw.githubusercontent.com/coupang-ads-sdk/android/main' } maven { url "s3://repo.cauly.net/releases" credentials(AwsCredentials) { accessKey "AKIAWRZUK5MFKYVSUOLB" secretKey "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" } } } } |
앱 수준의 build.gradle 파일
다음으로, 앱 수준의 build.gradle
파일에 버즈캐시버튼 종속성을 추가합니다.
Code Block |
---|
dependencies { // Buzzvil BOM api platform("com.buzzvil:buzzvil-bom:$buzzvilBomVersion") implementation "com.buzzvil:buzzscreen" implementation "com.buzzvil:buzz-cashbutton" // 버즈캐시버튼 종속성 추가 } |
종속성 추가시 발생할 수 있는 에러
버즈룰렛이나 아바티의 캐시룰렛을 기존에 연동하고 있었던 경우, 같은 이름의 클래스가 중복해서 발견되면서 에러가 발생할 수 있습니다.
Caused by: java.lang.RuntimeException: Duplicate class A found in modules B and C
문제 상황
버즈캐시버튼의 종속성을 추가한 상태에서 빌드할 때, 다음과 유사한 에러 메시지가 다수 발생하면서 빌드에 실패할 수 있습니다.
Caused by: java.lang.RuntimeException: Duplicate class com.mmc.common.AES256Cipher found in modules jetified-archive-ads-mezzomedia-2.0.0.202-runtime (com.avatye.cashbutton:archive-ads-mezzomedia:2.0.0.202) and jetified-cashroulette-plug-archive-aceenter-4.3.0-runtime (com.avatye:cashroulette-plug-archive-aceenter:4.3.0)
해결 방법
앱 수준의 build.gradle
파일에서 다음과 같이 특정 모듈의 종속성을 제외해주면 해결됩니다.
Code Block |
---|
dependencies { .... implementation ("com.buzzvil:buzz-roulette") { exclude group: 'com.avatye.cashbutton.buzzvil', module:'archive-ads-mezzomedia' } } |
문제 해결하기
버즈캐시버튼을 연동하면서 발생할 수 있는 다양한 문제 상황을 소개하고, 이에 대한 해결 방법을 제시합니다.
Expand | ||||||
---|---|---|---|---|---|---|
| ||||||
'create' overrides nothing문제 상황버즈캐시버튼의 종속성을 추가한 상태에서 빌드할 때, 다음과 같은 에러 메시지가 발생하면서 빌드에 실패할 수 있습니다.
조금 더 구체적으로는 다음과 같은 메시지를 받을 수 있습니다.
문제 설명기존에 androidx.lifecycle 모듈은 2.4.0에서 다음과 같은 하위호환성이 깨지는 변화가 있었습니다.
해결 방법코드에 다음과 같이 nullable한 타입으로
다음과 같이
관련 문서Inheritance from an interface with '@JvmDefault' members is only allowed with -Xjvm-default option문제 상황버즈캐시버튼의 종속성을 추가한 상태에서 빌드할 때, 다음과 같은 에러 메시지가 발생하면서 빌드에 실패할 수 있습니다.
문제 설명기존에 androidx.lifecycle 모듈은 2.5.0-alpha01 에서 하위호환성이 깨지는 변화가 있었고, 이로 인해 이 문제가 발생한다고 합니다. 해결 방법다음 두 가지 해결 방법 중 적절한 방법을 골라서 적용합니다.
관련 문서 |