คู่มือนี้มีไว้สําหรับผู้เผยแพร่โฆษณาที่ต้องการสร้างรายได้จากแอป C++ ด้วย AdMob และไม่ใช้ Firebase หากวางแผนที่จะใส่ Firebase ไว้ในแอป (หรือจะตัดสินใจใช้) ก็ดูเวอร์ชัน AdMob ที่มี Firebase ของคู่มือนี้แทนได้
การผสานรวม SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google สําหรับ C++ เป็นขั้นตอนแรกของการแสดงโฆษณาและสร้างรายได้ เมื่อผสาน SDK เข้าด้วยกันแล้ว คุณสามารถเลือกรูปแบบโฆษณา (เช่น โฆษณาคั่นระหว่างหน้าหรือโฆษณาที่มีการให้รางวัล) และทําตามขั้นตอนการติดตั้งใช้งานได้
SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ C++ ของ Google จะรวม SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ iOS และ Android ของ Google
และพร้อมใช้งานบนแพลตฟอร์มเหล่านั้นเท่านั้น SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ C++ ของ Google ใช้ประโยชน์จากโครงสร้าง Firebase C++ ของ Firebase เพื่อรองรับการดําเนินการแบบอะซิงโครนัส ซึ่งจะอยู่ในเนมสเปซ firebase::gma
หากนี่เป็นคู่มือนี้เป็นครั้งแรก เราขอแนะนําให้คุณดาวน์โหลดและติดตามโดยใช้แอปทดสอบ C++ สําหรับโฆษณาบนอุปกรณ์เคลื่อนที่ของ Google
สิ่งที่ต้องมีก่อน
Android
- ใช้ Android Studio 3.2 ขึ้นไป
- ตรวจสอบว่าไฟล์บิลด์ของแอปใช้ค่าต่อไปนี้
minSdkVersion
ตั้งแต่ 16 ขึ้นไปcompileSdkVersion
สําหรับระดับ 28 ขึ้นไป
iOS
- ใช้ Xcode 13 ขึ้นไป
- กําหนดเป้าหมาย iOS 10.0 ขึ้นไป
ตั้งค่าแอปในบัญชี AdMob
ลงทะเบียนแอปของคุณเป็นแอป AdMob โดยทําตามขั้นตอนต่อไปนี้
ลงชื่อเข้าใช้หรือลงชื่อสมัครใช้บัญชี AdMob
ลงทะเบียนแอปกับ AdMob ขั้นตอนนี้จะเป็นการสร้างแอป AdMob ที่มีรหัสแอป AdMob ที่ไม่ซ้ํากัน ซึ่งจําเป็นในคู่มือนี้
ติดตั้ง SDK สําหรับ C++ ของ Google Mobile Ads
เนื่องจาก SDK โฆษณาในอุปกรณ์เคลื่อนที่ C++ ของ Google อยู่ในเนมสเปซ firebase::gma
ให้ดาวน์โหลด Firebase C++ SDK แล้วแตกไฟล์ไปยังไดเรกทอรีที่ต้องการ
Firebase C++ SDK ไม่ใช่ SDK ที่เจาะจงแพลตฟอร์ม แต่ต้องใช้การกําหนดค่าไลบรารีเฉพาะแพลตฟอร์ม
Android
ในไฟล์
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
) ให้เพิ่มเนื้อหาต่อไปนี้ ซึ่งรวมถึงทรัพยากร Dependency ของไลบรารีสําหรับ C++ ของ Google Mobile Adsandroid.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}")
ซิงค์แอปเพื่อให้ทรัพยากร Dependency ทั้งหมดมีเวอร์ชันที่จําเป็น
เรียบร้อยแล้ว แอป C++ ของคุณได้รับการกําหนดค่าให้ใช้ SDK สําหรับ C++ ของ Google Mobile Ads โดยไม่มีบริการอื่นๆ ของ Firebase
iOS
ขั้นตอนในส่วนนี้เป็นตัวอย่างวิธีการเพิ่ม SDK C++ โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ลงในโครงการ iOS
รับ CocoaPods เวอร์ชัน 1 ขึ้นไปโดยเรียกใช้
sudo gem install cocoapods --pre
เพิ่มพ็อดโฆษณาบนอุปกรณ์เคลื่อนที่ของ Google จาก SDK ที่แยกไฟล์แล้ว
สร้าง Podfile หากคุณยังไม่มี ดังนี้
cd your-app-directory
pod init
เพิ่ม Podfile สําหรับ SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ C++ ใน Google ลงใน Podfile ดังนี้
pod 'Google-Mobile-Ads-SDK'
ติดตั้งพ็อด จากนั้นเปิดไฟล์
.xcworkspace
ใน Xcodepod install
open your-app.xcworkspace
เพิ่มเฟรมเวิร์กต่อไปนี้จาก Firebase C++ SDK ไปยังโปรเจ็กต์
xcframeworks/firebase.xcframework
xcframeworks/firebase_gma.xcframework
เรียบร้อยแล้ว แอป C++ ของคุณได้รับการกําหนดค่าให้ใช้ SDK สําหรับ C++ ของ Google Mobile Ads โดยไม่มีบริการอื่นๆ ของ Firebase
กําหนดค่ารหัสแอป AdMob ของ App'
Android
ทําตามขั้นตอนที่ 3 ของกําหนดค่าแอปตามที่อธิบายในคู่มือ Android สําหรับ SDK โฆษณาในอุปกรณ์เคลื่อนที่ จากนั้นกลับไปที่หน้าเริ่มต้นใช้งาน C++ นี้
iOS
ทําตามขั้นตอนอัปเดต Info.plist ตามที่อธิบายไว้ในคู่มือ SDK โฆษณาในอุปกรณ์เคลื่อนที่ iOS แล้วกลับมาที่หน้าเริ่มต้นใช้งาน C++ นี้
เริ่มต้น SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google
ก่อนโหลดโฆษณา ให้แอปเริ่มต้น SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ C++ ของ Google โดยการเรียกใช้ firebase::gma::Initialize()
ซึ่งจะเริ่มต้น SDK และดําเนินการ firebase::Future
ให้เรียบร้อยเมื่อการเริ่มต้นเสร็จสมบูรณ์ (หรือหลังจากหมดเวลา 30 วินาที) ขั้นตอนนี้ควรทําเพียงครั้งเดียวเท่านั้น หากเป็นไปได้ ควรเปิดแอป
โฆษณาอาจได้รับการโหลดไว้ล่วงหน้าโดย C++ SDK ของ Google Mobile Ads หรือ SDK ของพาร์ทเนอร์สื่อกลางเมื่อเรียกใช้ Initialize()
หากต้องได้รับความยินยอมจากผู้ใช้ในเขตเศรษฐกิจยุโรป (EEA) ให้ตั้งค่าแฟล็กเฉพาะคําขอ (เช่น tag_for_child_directed_treatment
หรือ tag_for_under_age_of_consent
) หรือดําเนินการก่อนโหลดโฆษณา โปรดตรวจสอบว่าคุณได้เรียก
firebase::gma::SetRequestConfiguration()
ก่อนเริ่มต้น SDK C++ ของ Google Mobile Ads สําหรับข้อมูลเพิ่มเติม โปรดดูคู่มือการกําหนดเป้าหมาย
ตัวอย่างวิธีโทรหา 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
ใหม่ จากนั้นแอปจะสํารวจ
status()
ของ Future
เพื่อพิจารณาหาการเริ่มต้นเมื่อเสร็จสมบูรณ์ได้
เมื่อสร้างเสร็จแล้ว แอปจะเรียกใช้ result()
เพื่อรับ AdapterInitializationStatus
ได้
เมธอดที่ส่งกลับ Future
มีเมธอด "last results" ที่เกี่ยวข้องซึ่งแอปสามารถใช้เพื่อเรียก Future
ล่าสุดสําหรับการดําเนินการหนึ่งๆ เช่น firebase::gma::Initialize()
มีวิธีที่สอดคล้องกันที่เรียกว่า firebase::gma::InitializeLastResult()
ซึ่งจะแสดง Future
ที่แอปของคุณสามารถใช้เพื่อตรวจสอบสถานะการเรียกครั้งล่าสุดไปยัง firebase::gma::Initialize()
หากสถานะของ 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.
}
}
เลือกรูปแบบโฆษณา
มีการนําเข้า SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ C++ ของ Google แล้ว และคุณพร้อมที่จะติดตั้งใช้งานโฆษณา AdMob มีรูปแบบโฆษณาต่างๆ มากมาย คุณจึงสามารถเลือกรูปแบบที่เหมาะกับประสบการณ์ของผู้ใช้ในแอปของคุณได้ดีที่สุด
แบนเนอร์
โฆษณาทรงสี่เหลี่ยมผืนผ้าที่ปรากฏด้านบนหรือด้านล่างของหน้าจออุปกรณ์ โฆษณาแบนเนอร์จะอยู่บนหน้าจอขณะที่ผู้ใช้โต้ตอบกับแอป และจะรีเฟรชโดยอัตโนมัติหลังจากช่วงเวลาหนึ่งๆ ได้ หากคุณยังไม่คุ้นเคยกับการโฆษณาบนอุปกรณ์เคลื่อนที่ และเป็นจุดเริ่มต้นที่ดี
โฆษณาคั่นระหว่างหน้า
โฆษณาแบบเต็มหน้าจอซึ่งบดบังอินเทอร์เฟซแอปจนกว่าผู้ใช้จะปิด มักเหมาะในการหยุดชั่วคราวระหว่างการดําเนินการของแอป เช่น ด่านต่างๆ ของเกมหรือหลังจากทํางานเสร็จ
ได้รับรางวัลแล้ว
โฆษณาที่ให้รางวัลแก่ผู้ใช้ที่ดูวิดีโอสั้นและการโต้ตอบกับโฆษณา และโฆษณาที่เล่นได้ ใช้สําหรับการสร้างรายได้จากแอปฟรีที่เล่น