C++
Adkit สำหรับ AD(X): C++¶
การสร้างสภาพแวดล้อมการพัฒนา¶
Android¶
สร้าง Prebuilt-Firebase-Library และฝัง AdKit SourceCode เพื่อใช้ AdKit แนะนำให้ใช้ Android Studio 3.0 ขึ้นไป
-  ExternalNativeBuild - [กรณี 1] การใช้ #ndk-build
 // ‘Android.mk’ $(call import-add-path,$(LOCAL_PATH)/../../..) #ตั้งค่าเส้นทางเพื่อติดตั้งโมดูล HIVEAdKit $(call import-module, HIVEAdKit) #โหลดการกำหนดค่าของโมดูล HIVEAdKit $(call import-module, HIVEAdKit/firebase_cpp_sdk) #โหลดเวอร์ชันที่สร้างไว้ล่วงหน้าของโมดูล firebase_cpp_sdk เพื่อใช้ HIVEAdKit- [กรณี 2] การใช้ #cmake
 // 'CMakeList.txt' set(HIVEADKIT_DIR_PATH ....../HIVEAdKit) #Path setup to install HIVEAdKit module #Import HIVEAdKit library after add_library (MyGame ...) add_subdirectory(${HIVEADKIT_DIR_PATH}) #HIVEAdKit library & macro load use_hiveadkit_prebuilt(${HIVEADKIT_DIR_PATH} MyGame) #Import the library import automatic macro to build target
-  เพิ่มสิ่งต่อไปนี้ลงในไฟล์ build.gradle android { ... sourceSets.main { java.srcDirs "src" , "../../HIVEAdKit/Android/java" // HIVEAdKit JavaPlugin Source Path } ... } gradle.ext.firebase_cpp_sdk_dir = "../HIVEAdKit/firebase_cpp_sdk" // ตั้งค่า HIVEAdKit/firebase_cpp_sdk Path apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle" firebaseCpp.dependencies { admob }
-  ในกรณีที่ใช้ AD(X) หรือ ADOP กับบริการ AdMob-AdManager ให้เพิ่มสิ่งต่อไปนี้ลงในไฟล์ AndroidManifest.xml 
-  ในกรณีที่ใช้ AD(X) ให้เพิ่มสิ่งต่อไปนี้ลงในไฟล์ build.gradle 
iOS¶
สร้าง Firebase-Framework และโค้ดแหล่งที่มาของ AdKit ที่รวมอยู่เพื่อใช้ฟีเจอร์นี้。
-  ลากและวางโฟลเดอร์ HIVEAdKit/src และ HIVEAdKit/include ไปยังโปรเจกต์ XCode. - รวมไฟล์ทั้งหมดที่มีนามสกุล .cpp, .hpp และ .mm.
- AdKit ให้โค้ดแบบสะพานสำหรับการใช้งานจริง.
 
-  เพิ่ม HIVEAdKit/firebase_cpp_sdk/frameworks/ios/universal ไปที่ Project > Build Settings > Search Paths > Framework Search Path. 
-  เพิ่ม HIVEAdKit/firebase_cpp_sdk/include ไปที่ Project > Build Settings > Search Paths > Header Search Path. 
-  เพิ่ม -framework "firebase" และ -framework "firebase_admob" ไปที่ Project > Build Settings > Other Flags. 
-  เพิ่มสิ่งต่อไปนี้ในการตั้งค่า CocoaPods. 
-  ในกรณีที่ใช้ AD(X) ให้เพิ่มสิ่งต่อไปนี้ในการตั้งค่า CocoaPods 
-  เพื่อดาวน์โหลด SDK ล่าสุดของ iOS จาก Xcode คุณต้องดำเนินการตามคำสั่งต่อไปนี้ 
คีย์สำหรับโฆษณาทดสอบใน AdMob ถูกตั้งค่าในตัวอย่างต่อไปนี้
```
#if defined(ANDROID)
const char* appId =                  "ca-app-pub-3940256099942544~3347511713";
const char* rewardVideoUnitId =      "ca-app-pub-3940256099942544/5224354917";
const char* InterstitialAdUnitId =   "ca-app-pub-3940256099942544/1033173712";
const char* AdaptiveBannerAdUnitId = "ca-app-pub-3940256099942544/6300978111";
#else // iOS
const char* appId =                  "ca-app-pub-3940256099942544~1458002511";
const char* rewardVideoUnitId =      "ca-app-pub-3940256099942544/1712485313";
const char* InterstitialAdUnitId =   "ca-app-pub-3940256099942544/4411468910";
const char* AdaptiveBannerAdUnitId = "ca-app-pub-3940256099942544/2934735716";
#endif
```
คุณสมบัติ¶
หากคุณใช้ Reward Video API จาก AdKit C++ กับ Hive SDK การส่งข้อมูลบันทึกขึ้นอยู่กับ RewardVideo API ที่นำมาใช้ ข้อมูลบันทึกจะถูกส่งไปยังเซิร์ฟเวอร์ Analytics และฟีเจอร์นี้มีให้ใช้งานกับเวอร์ชันต่อไปนี้และเวอร์ชันที่ใหม่กว่าของ Hive SDK จะไม่ทำงานหาก Hive SDK ยังไม่ได้ถูกเริ่มต้นหรือไม่มีอยู่
- Hive SDK v4.11.0<
วิธีการใช้ AdKit มีดังนี้
การเริ่มต้น AdMob¶
ขั้นตอนที่จำเป็นก่อนการเริ่มต้น โหลด และแสดงโฆษณาทุกประเภท (AD)
    //App ID, API key, and Project ID must be specified in App options.
    firebase::AppOptions appOptions = firebase::AppOptions();
    #ifdef __ANDROID__
        // Android Only
        appOptions.set_app_id("331526026701");
        appOptions.set_api_key("AIzaSyAxOUz9NQtpZZD_XvfD5L7V1dZZ96tYwZ8");//
        appOptions.set_project_id("core-cocos-test");
    #endif
    firebase::InitResult result = HIVEAdKit::AdMobInitialize(appOptions);
    if(result == firebase::kInitResultSuccess) {
        // AdMob initialization successful
    }
ประเภทที่ได้รับรางวัล¶
    // Initialize
    auto rewardVideo = HIVEAdKit::RewardVideo::Initialize(rewardVideoUnitId, this, getAdMobViewParent(),
                                                                                                [=](const firebase::Future< void >& completed_future) {
        if (completed_future.error() == 0) {
                // Initiallized successfully
        }
    });
    // Load
    // Send AD loading information to Analytics
    std::string adPlacement = "CocosCPP-RewardVideo-Load-AdditionalInfo";
    firebase::admob::AdRequest my_ad_request = {};
    HIVEAdKit::RewardVideo::Load(*rewardVideo,  my_ad_request, adPlacement,
                                                                                            [=](const firebase::Future< void >& completed_future) {
        if (completed_future.error() == 0) {
                // Loaded successfully
        }
    });
    // Show
    // Send AD loading information to Analytics
    std::string adPlacement = "CocosCPP-RewardVideo-Show-AdditionalInfo";
    HIVEAdKit::RewardVideo::Show(*rewardVideo, adPlacement,
                                                                                            [=](const firebase::Future< void >& completed_future) {
        if (completed_future.error() == 0) {
                // Shown successfully
        }
    });
ประเภทระหว่าง¶
// Initialize
auto interstitial = HIVEAdKit::Interstitial::Initialize(InterstitialAdUnitId, this, getAdMobViewParent(),
                                               [=](const firebase::Future< void >& completed_future) {
if (completed_future.error() == 0) {
       // Initiallized successfully
   }
});
// Load
// Send AD loading information to Analytics
std::string adPlacement = "CocosCPP-Interstitial-Load-AdditionalInfo";
firebase::admob::AdRequest my_ad_request = {};
HIVEAdKit::Interstitial::Load(*interstitial, my_ad_request, adPlacement,
                                             [=](const firebase::Future< void >& completed_future) {
if (completed_future.error() == 0) {
       // Loaded successfully
   }
});
// Show
// Send AD loading information to Analytics
std::string adPlacement = "CocosCPP-Interstitial-Show-AdditionalInfo";
HIVEAdKit::Interstitial::Show(*interstitial, adPlacement,
                                             [=](const firebase::Future< void >& completed_future) {
if (completed_future.error() == 0) {
       // Shown successfully
   }
});
ประเภทแบนเนอร์แบบปรับตัว¶
// Initialize
auto adaptiveBanner = HIVEAdKit::AdaptiveBanner::Initialize(AdaptiveBannerAdUnitId,
                                                                   this,
                                                                   getAdMobViewParent(),
                                                                   banner_ad_size,
                                                                   bannerPosition,
                                               [=](const firebase::Future< void >& completed_future) {
if (completed_future.error() == 0) {
       // Initialized successfully
   }
});
// Set banner position
HIVEAdKit::AdaptiveBanner::SetPosition(*adaptiveBanner, bannerPosition, [=](const firebase::Future< void >& completed_future) {
});
// Load
// Send AD loading information to Analytics
std::string adPlacement = "CocosCPP-AdaptiveBanner-Load-AdditionalInfo";
firebase::admob::AdRequest my_ad_request = {};
HIVEAdKit::AdaptiveBanner::Load(*adaptiveBanner, my_ad_request, adPlacement,
                                             [=](const firebase::Future< void >& completed_future) {
if (completed_future.error() == 0) {
       // Loaded successfully
   }
});
// Show
// Send AD loading information to Analytics
std::string adPlacement = "CocosCPP-AdaptiveBanner-Show-AdditionalInfo";
HIVEAdKit::AdaptiveBanner::Show(*adaptiveBanner, adPlacement,
                                             [=](const firebase::Future< void >& completed_future) {
if (completed_future.error() == 0) {
       // Shown successfully
   }
});
// Hide
HIVEAdKit::AdaptiveBanner::Hide(*adaptiveBanner,
                                             [=](const firebase::Future< void >& completed_future) {
if (completed_future.error() == 0) {
       // Hidden successfully
   }
});
การสนับสนุน iOS 14¶
ต่อไปนี้คือรายการ SKAdNetwork ของ AD(X) สำหรับการสนับสนุน iOS 14 และเวอร์ชันที่ใหม่กว่า AdKitPostprocess อิงจากการอัปเดตเมื่อวันที่ 29 มกราคม 2021 อย่าลืมตรวจสอบการอัปเดตล่าสุด
- การอัปเดต SKAdNetwork
การแจ้งเตือนการรวม Unity¶
-  ปฏิบัติตามขั้นตอนด้านล่างเพื่อซิงค์ ADXUnityPackage 1.10.0 หรือสูงกว่า ภายใต้สภาพแวดล้อม Unity Engine 2019.4 หรือสูงกว่า. -  ใน Unity editor ให้ตรวจสอบที่ Assets > External Dependency Manager > iOS Resolver > Settings > Add use_frameworks! to Podfile และ Link frameworks statically จากนั้นบันทึกมัน.  
-  เพิ่ม OMSDK_Mopub.xcframework (Pods/mopub-ios-sdk/Frameworks/OMSDK_Mopub.xcframework) ใน iOS PROJECT > Targets > Build Phases > Embed Frameworks.  
-  เพิ่ม FBSDKCoreKit_Basics.xcframework (Pods/FBSDKCoreKit_Basics/XCFrameworks/FBSDKCoreKit_Basics.xcframework) บน Targets > Build Phases > Embed Frameworks เพื่อซิงค์ ADXUnityPackage 1.10.3 หรือสูงกว่า ภายใต้สภาพแวดล้อม Unity Engine 2019.4 หรือสูงกว่า.  
 
-  
-  หาก App ID ใน GoogleMobileAdsSettings ถูกลบออก ให้ไปที่ Unity > Assets > Google Mobile Ads > Settings และเลือกช่องทำเครื่องหมาย Delay app measurement จากนั้นให้ลบออกอีกครั้ง.  
ตรวจสอบปัญหา¶
หากคุณพัฒนาเกมของคุณด้วย Cocos2D-X ไลบรารีบางส่วนของ FlatBuffers ในเอนจิน Cocos2D-X และไลบรารีที่ฝังใน Firebase จะซ้ำกัน เพื่อป้องกันการซ้ำซ้อน ให้พยายามไม่รวมไลบรารี FlatBuffers หรือสร้างไลบรารีโอเพนซอร์สที่ Firebase จัดเตรียมไว้โดยตรง Firebase รวมไลบรารีด้านล่างนี้ หากไลบรารีล่มเนื่องจากการซ้ำซ้อน ให้ใช้ Firebase open-source libraries เพื่อสร้างโปรเจกต์ของคุณด้วยตนเอง
- Curl
- FlatBuffers
- libuv
- Nanopb
- uWebSockets
- Zlib