คู่มือนี้มีไว้สำหรับผู้เผยแพร่โฆษณาที่ต้องการสร้างรายได้จากแอป C++ ด้วย AdMob โดยไม่ใช้ Firebase หากคุณวางแผนที่จะรวม Firebase ไว้ในแอปหรือกำลังพิจารณาที่จะทำเช่นนั้น โปรดดูคู่มือนี้ในเวอร์ชัน AdMob กับ Firebase แทน
การผสานรวม SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google C++ เข้ากับแอปเป็นเพียงขั้นตอนแรกที่คุณต้องทำเพื่อแสดงโฆษณาและรับรายได้ เมื่อผสาน SDK เรียบร้อยแล้ว คุณจะเลือกรูปแบบโฆษณาได้ เช่น โฆษณาคั่นระหว่างหน้าหรือโฆษณาที่มีการให้รางวัล แล้วทําตามขั้นตอนเพื่อใช้งาน
Google Mobile Ads C++ SDK จะรวม SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google สำหรับ iOS และ Android และใช้ได้เฉพาะในแพลตฟอร์มเหล่านั้นเท่านั้น SDK ของ Google Mobile Ads C++ ใช้คอนสตรัคต์ Firebase C++ เพื่อรองรับการดำเนินการแบบไม่สอดคล้องกัน จึงอยู่ในเนมสเปซ firebase::gma
หากคุณอ่านคู่มือนี้เป็นครั้งแรก เราขอแนะนําให้ดาวน์โหลดและทําตามคู่มือโดยใช้แอปทดสอบ C++ ของ Google Mobile Ads
ข้อกำหนดเบื้องต้น
Android
- ใช้ Android Studio 3.2 ขึ้นไป
- ตรวจสอบว่าไฟล์บิลด์ของแอปใช้ค่าต่อไปนี้
minSdkVersion
อย่างน้อย 16compileSdkVersion
อย่างน้อย 28
iOS
- ใช้ Xcode 13 ขึ้นไป
- กำหนดเป้าหมายเป็น iOS 10.0 ขึ้นไป
ตั้งค่าแอปในบัญชี AdMob
ลงทะเบียนแอปเป็นแอป AdMob โดยทําตามขั้นตอนต่อไปนี้
ลงชื่อเข้าใช้หรือลงชื่อสมัครใช้บัญชี AdMob
ลงทะเบียนแอปกับ AdMob ขั้นตอนนี้จะสร้างแอป AdMob ที่มีรหัสแอป AdMob ที่ไม่ซ้ำกัน ซึ่งต้องใช้ในภายหลังในคู่มือนี้
ติดตั้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google สำหรับ C++
เนื่องจาก Google Mobile Ads C++ SDK อยู่ในเนมสเปซ firebase::gma
ให้ดาวน์โหลด Firebase C++ SDK แล้วแตกไฟล์ไปยังไดเรกทอรีที่ต้องการ
Firebase C++ SDK ไม่ได้เจาะจงแพลตฟอร์ม แต่ต้องมีการกําหนดค่าไลบรารีเฉพาะแพลตฟอร์ม
Android
เราขอแนะนําให้ใช้ CMake แต่คุณสามารถดูวิธีการสําหรับ ndk-build ในคู่มือเริ่มต้นใช้งาน Firebase C++ SDK ทั่วไปเพื่อลิงก์ libfirebase_app.a
และ libfirebase_gma.a
กับแอป
ในไฟล์
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 ของไลบรารีสําหรับ SDK ของ Google Mobile Ads C++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}")
ซิงค์แอปเพื่อให้ทรัพยากร Dependency ทั้งหมดมีเวอร์ชันที่จำเป็น
iOS
ขั้นตอนในส่วนนี้เป็นตัวอย่างวิธีเพิ่ม Google Mobile Ads SDK แบบ C++ ลงในโปรเจ็กต์ iOS
ดาวน์โหลด CocoaPods เวอร์ชัน 1 ขึ้นไปโดยเรียกใช้คำสั่งต่อไปนี้
sudo gem install cocoapods --pre
เพิ่มพ็อด Google Mobile Ads จาก SDK ที่แตกไฟล์แล้ว
หากคุณยังไม่มี Podfile ให้สร้างโดยเรียกใช้คำสั่งต่อไปนี้
cd APP_DIRECTORY
pod init
เพิ่มพ็อดสําหรับ Google Mobile Ads C++ SDK, SDK สําหรับ User Messaging Platform ของ Google และ Firebase Core SDK ขั้นต่ำ (ตามที่ GMA C++ SDK ต้องการ) ลงใน Podfile
pod 'Firebase/CoreOnly' pod 'Google-Mobile-Ads-SDK' pod 'GoogleUserMessagingPlatform'
ติดตั้งพ็อด แล้วเปิดไฟล์
.xcworkspace
ใน Xcodepod install
open APP.xcworkspace
เพิ่มเฟรมเวิร์กต่อไปนี้จาก Firebase C++ SDK ลงในโปรเจ็กต์
xcframeworks/firebase.xcframework
xcframeworks/firebase_gma.xcframework
คุณพร้อมแล้ว แอป C++ ได้รับการกําหนดค่าให้ใช้ Google Mobile Ads C++ SDK โดยไม่ใช้บริการ Firebase อื่นๆ
กำหนดค่ารหัสแอป AdMob ของแอป
Android
ทําตามขั้นตอนที่ 3 ของกําหนดค่าแอปตามที่อธิบายไว้ในคําแนะนําสําหรับ Android ของ Mobile Ads SDK แล้วกลับมาที่หน้านี้
iOS
ทําตามขั้นตอนอัปเดต Info.plist ตามที่อธิบายไว้ในคําแนะนําเกี่ยวกับ Mobile Ads SDK สำหรับ iOS แล้วกลับมาที่หน้านี้
เริ่มใช้ SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google
ก่อนโหลดโฆษณา ให้แอปเริ่มต้น SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google C++ โดยเรียกใช้ firebase::gma::Initialize()
ซึ่งจะเริ่มต้น SDK และดำเนินการ firebase::Future
ให้เสร็จสมบูรณ์เมื่อเริ่มต้นเสร็จแล้ว (หรือหลังจากหมดเวลา 30 วินาที) ขั้นตอนนี้ต้องทำเพียงครั้งเดียว โดยควรทำเมื่อเปิดแอป
SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google C++ หรือ SDK ของพาร์ทเนอร์สื่อกลางอาจโหลดโฆษณาล่วงหน้าเมื่อเรียกใช้ Initialize()
หากต้องการขอความยินยอมจากผู้ใช้ในเขตเศรษฐกิจยุโรป (EEA) ให้ตั้งค่า Flag ที่เจาะจงคำขอ (เช่น tag_for_child_directed_treatment
หรือ tag_for_under_age_of_consent
) หรือดำเนินการก่อนโหลดโฆษณา โปรดตรวจสอบว่าคุณดำเนินการดังกล่าวโดยการเรียกใช้ firebase::gma::SetRequestConfiguration()
ก่อนเริ่มต้นใช้งาน Google Mobile Ads C++ SDK ดูข้อมูลเพิ่มเติมได้ที่คู่มือการกำหนดเป้าหมาย
ตัวอย่างวิธีเรียกใช้ 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
จะมีเมธอด "ผลลัพธ์ล่าสุด" ที่สอดคล้องกัน ซึ่งแอปสามารถใช้เพื่อดึงข้อมูล 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 โฆษณาในอุปกรณ์เคลื่อนที่ของ Google C++ แล้ว และคุณก็พร้อมที่จะติดตั้งใช้งานโฆษณา AdMob มีโฆษณาหลายรูปแบบเพื่อให้คุณเลือกรูปแบบที่เหมาะกับประสบการณ์ของผู้ใช้แอปมากที่สุด
แบนเนอร์
โฆษณาสี่เหลี่ยมผืนผ้าที่ปรากฏที่ด้านบนหรือด้านล่างของหน้าจออุปกรณ์ โฆษณาแบนเนอร์จะแสดงบนหน้าจอขณะที่ผู้ใช้โต้ตอบกับแอป และสามารถรีเฟรชโดยอัตโนมัติหลังจากเวลาผ่านไประยะหนึ่ง ฟีเจอร์เหล่านี้เหมาะอย่างยิ่งสําหรับผู้เริ่มต้นใช้งานการโฆษณาบนอุปกรณ์เคลื่อนที่
โฆษณาคั่นระหว่างหน้า
โฆษณาแบบเต็มหน้าจอที่ครอบคลุมอินเทอร์เฟซของแอปจนกว่าผู้ใช้จะปิด โฆษณาประเภทนี้เหมาะสําหรับใช้ในช่วงหยุดชั่วคราวตามปกติของขั้นตอนการทํางานของแอป เช่น ระหว่างด่านในเกมหรือหลังจากทํางานเสร็จแล้ว
ติดตั้งใช้งานโฆษณาคั่นระหว่างหน้า
ได้รับรางวัลแล้ว
โฆษณาที่ให้รางวัลแก่ผู้ใช้หลังจากชมวิดีโอสั้นๆ จบแล้วมีการโต้ตอบกับโฆษณาที่เล่นได้และแบบสำรวจ ใช้สำหรับการสร้างรายได้จากแอปเล่นฟรี