이 가이드는 Firebase를 사용하지 않고 AdMob으로 C++ 앱에서 수익을 창출하려는 게시자를 위해 작성되었습니다. 앱에 Firebase를 포함할 계획이거나 이를 고려 중이라면 이 가이드의 Firebase와 함께 AdMob 이용하기 버전을 참고하세요.
광고를 게재하고 수익을 올리려면 먼저 Google 모바일 광고 C++ SDK를 앱에 통합해야 합니다. SDK를 통합한 다음 전면 광고 또는 보상형 광고와 같은 광고 형식을 선택하고 구현 단계를 진행하세요.
Google 모바일 광고 C++ SDK는 Google 모바일 광고 iOS 및 Android SDK를 래핑하며 이러한 플랫폼에서만 사용할 수 있습니다. Google 모바일 광고 C++ SDK는 Firebase C++ 구성체를 사용하여 비동기 작업을 지원하므로 firebase::gma
네임스페이스에 있습니다.
이 가이드를 처음으로 진행하는 경우 우선 Google 모바일 광고 C++ 테스트 앱을 다운로드하여 따라 해 보는 것이 좋습니다.
기본 요건
Android
- Android 스튜디오 3.2 이상 사용
- 앱의 빌드 파일이 다음 값을 사용하는지 확인합니다.
minSdkVersion
16 이상compileSdkVersion
28 이상
iOS
- Xcode 13 이상 사용
- iOS 10.0 이상 타겟팅
AdMob 계정에서 앱 설정하기
다음 단계에 따라 앱을 AdMob 앱으로 등록합니다.
AdMob에 앱을 등록합니다. 이 단계에서는 고유한 AdMob 앱 ID로 AdMob 앱을 만들며 이 ID는 이 가이드의 뒷부분에서 필요합니다.
Google 모바일 광고 C++ SDK 설치
Google 모바일 광고 C++ SDK는 firebase::gma
네임스페이스에 있으므로 Firebase C++ SDK를 다운로드한 후 원하는 디렉터리에 압축을 풉니다.
Firebase C++ SDK는 플랫폼별로 제공되지 않지만 플랫폼별 라이브러리 구성이 필요합니다.
Android
CMake를 사용하는 것이 좋지만 libfirebase_app.a
및 libfirebase_gma.a
를 앱에 연결하려면 일반 Firebase C++ SDK 시작 가이드에서 ndk-build에 대한 지침을 찾을 수 있습니다.
프로젝트의
gradle.properties
파일에서 압축을 푼 SDK의 위치를 지정합니다.systemProp.firebase_cpp_sdk.dir=FULL_PATH_TO_SDK
프로젝트의
settings.gradle
파일에 다음 콘텐츠를 추가합니다.def firebase_cpp_sdk_dir = System.getProperty('firebase_cpp_sdk.dir') gradle.ext.firebase_cpp_sdk_dir = "$firebase_cpp_sdk_dir" includeBuild "$firebase_cpp_sdk_dir"
모듈(앱 수준) Gradle 파일(일반적으로
app/build.gradle
)에 Google 모바일 광고 C++ SDK의 라이브러리 종속 항목이 포함된 다음 콘텐츠를 추가합니다.android.defaultConfig.externalNativeBuild.cmake { arguments "-DFIREBASE_CPP_SDK_DIR=$gradle.firebase_cpp_sdk_dir" } # Add the dependency for the Google Mobile Ads C++ SDK apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle" firebaseCpp.dependencies { gma }
프로젝트의
CMakeLists.txt
파일에 다음 콘텐츠를 추가합니다.# Add Firebase libraries to the target using the function from the SDK. add_subdirectory(${FIREBASE_CPP_SDK_DIR} bin/ EXCLUDE_FROM_ALL) # Add the Google Mobile Ads C++ SDK. # The Firebase C++ library `firebase_app` is required, # and it must always be listed last. set(firebase_libs firebase_gma firebase_app ) target_link_libraries(${target_name} "${firebase_libs}")
앱을 동기화하여 모든 종속 항목에 필요한 버전이 있는지 확인합니다.
iOS
이 섹션의 단계는 Google 모바일 광고 C++ SDK를 iOS 프로젝트에 추가하는 방법의 예시입니다.
다음을 실행하여 CocoaPods 버전 1 이상을 가져옵니다.
sudo gem install cocoapods --pre
압축을 푼 SDK에서 Google 모바일 광고 포드를 추가합니다.
Podfile이 없으면 만듭니다.
cd APP_DIRECTORY
pod init
Podfile에 Google 모바일 광고 C++ SDK, Google User Messaging Platform SDK, 최소 Firebase Core SDK(GMA C++ SDK에 필요)용 포드를 추가합니다.
pod 'Firebase/CoreOnly' pod 'Google-Mobile-Ads-SDK' pod 'GoogleUserMessagingPlatform'
포드를 설치하고 Xcode에서
.xcworkspace
파일을 엽니다.pod install
open APP.xcworkspace
Firebase C++ SDK에서 다음 프레임워크를 프로젝트에 추가합니다.
xcframeworks/firebase.xcframework
xcframeworks/firebase_gma.xcframework
완료되었습니다. 다른 Firebase 서비스 없이 Google 모바일 광고 C++ SDK를 사용하도록 C++ 앱이 구성되었습니다.
앱의 AdMob 앱 ID 구성
Android
모바일 광고 SDK Android 가이드에 설명된 대로 앱 구성의 3단계를 따르고 이 페이지로 돌아옵니다.
iOS
모바일 광고 SDK iOS 가이드에 설명된 Info.plist 업데이트 단계를 따르고 이 페이지로 돌아옵니다.
Google 모바일 광고 SDK 초기화
광고를 로드하기 전에 SDK를 초기화하고 초기화가 완료된 후 (또는 30초의 제한 시간이 경과한 후에) firebase::Future
를 완료하는 firebase::gma::Initialize()
를 호출하여 앱에서 Google 모바일 광고 C++ SDK를 초기화하도록 합니다. 이 작업은 앱 실행 시 한 번만 처리하면 됩니다.
Initialize()
를 호출할 때 Google 모바일 광고 C++ SDK 또는 미디에이션 파트너 SDK에서 광고를 미리 로드할 수도 있습니다. 유럽 경제 지역 (EEA) 사용자의 동의를 얻어야 하는 경우 요청별 플래그 (예: tag_for_child_directed_treatment
또는 tag_for_under_age_of_consent
)를 설정하거나 광고를 로드하기 전에 조치를 취하세요. 이 작업은 Google 모바일 광고 C++ SDK를 초기화하기 전에 firebase::gma::SetRequestConfiguration()
을 호출하여 수행해야 합니다. 자세한 내용은 타겟팅 가이드를 참고하세요.
다음은 Initialize()
를 호출하는 방법의 예입니다.
Android
// Initialize the Google Mobile Ads library
firebase::InitResult result;
Future<AdapterInitializationStatus> future =
firebase::gma::Initialize(jni_env, j_activity, &result);
if (result != kInitResultSuccess) {
// Initialization immediately failed, most likely due to a missing
// dependency. Check the device logs for more information.
return;
}
// Monitor the status of the future.
// See "Use a Future to monitor the completion status of a method call" below.
if (future.status() == firebase::kFutureStatusComplete &&
future.error() == firebase::gma::kAdErrorCodeNone) {
// Initialization completed.
} else {
// Initialization on-going, or an error has occurred.
}
iOS
// Initialize the Google Mobile Ads library.
firebase::InitResult result;
Future<AdapterInitializationStatus> future =
firebase::gma::Initialize(&result);
if (result != kInitResultSuccess) {
// Initialization immediately failed, most likely due to a missing
// dependency. Check the device logs for more information.
return;
}
// Monitor the status of the future.
// See "Use a Future to monitor the completion status of a method call" below.
if (future.status() == firebase::kFutureStatusComplete &&
future.error() == firebase::gma::kAdErrorCodeNone) {
// Initialization completed.
} else {
// Initialization on-going, or an error has occurred.
}
Future
를 사용하여 메서드 호출의 완료 상태 모니터링
Future
를 사용하면 비동기 메서드 호출의 완료 상태를 파악할 수 있습니다.
예를 들어 앱에서 firebase::gma::Initialize()
를 호출하면 새 firebase::Future
가 생성되고 반환됩니다. 그러면 앱은 Future
의 status()
를 폴링하여 초기화가 완료된 시점을 판단할 수 있습니다.
완료되면 앱에서 result()
를 호출하여 결과 AdapterInitializationStatus
를 가져올 수 있습니다.
Future
를 반환하는 메서드에는 상응하는 '최종 결과' 메서드가 있으며, 앱에서는 이 메서드로 특정 작업의 가장 최근 Future
를 검색할 수 있습니다. 예를 들어 firebase::gma::Initialize()
에는 firebase::gma::InitializeLastResult()
라는 해당 메서드가 있으며, 이는 앱이 firebase::gma::Initialize()
에 대한 마지막 호출 상태를 확인하는 데 사용할 수 있는 Future
를 반환합니다.
Future
의 상태가 완료되고 오류 코드가 firebase::gma::kAdErrorCodeNone
이면 작업이 성공적으로 완료된 것입니다.
Future
완료 시에 호출되는 콜백을 등록할 수도 있습니다. 때에 따라 콜백이 다른 스레드에서 실행되므로 코드가 스레드로부터 안전한지 확인해야 합니다. 다음 코드 스니펫에서는 함수 포인터를 콜백으로 사용합니다.
// Registers the OnCompletion callback. user_data is a pointer that is passed verbatim
// to the callback as a void*. This allows you to pass any custom data to the callback
// handler. In this case, the app has no data, so you must pass nullptr.
firebase::gma::InitializeLastResult().OnCompletion(OnCompletionCallback,
/*user_data=*/nullptr);
// The OnCompletion callback function.
static void OnCompletionCallback(
const firebase::Future<AdapterInitializationStatus>& future, void* user_data) {
// Called when the Future is completed for the last call to firebase::gma::Initialize().
// If the error code is firebase::gma::kAdErrorCodeNone,
// then the SDK has been successfully initialized.
if (future.error() == firebase::gma::kAdErrorCodeNone) {
// success!
} else {
// failure.
}
}
광고 형식 선택
Google 모바일 광고 C++ SDK를 가져왔으므로 광고를 구현할 준비가 되었습니다. AdMob에서는 다양한 광고 형식을 제공하므로 앱의 사용자 환경에 가장 적합한 형식을 선택할 수 있습니다.
배너
기기 화면의 상단이나 하단에 표시되는 직사각형 광고입니다. 배너 광고는 사용자가 앱과 상호작용하는 동안 화면에 표시되며 일정 시간이 지나면 자동으로 새로고침될 수 있습니다. 모바일 광고를 처음 시작하는 경우 배너 광고를 이용하는 것이 좋습니다.
전면 광고
사용자가 닫을 때까지 앱의 인터페이스를 완전히 덮는 전체 화면 광고입니다. 게임 레벨이 바뀌는 사이 또는 작업 완료 직후와 같이 앱 사용을 자연스럽게 멈추는 시점에 게재하는 것이 좋습니다.
리워드 제공됨
짧은 동영상을 시청하거나 플레이어블 광고 또는 설문조사와 상호작용한 사용자에게 리워드를 제공하는 광고 형식입니다. 무료 플레이 앱 수익 창출에 사용됩니다.