ข้ามไปที่เนื้อหา

C++

Adkit สำหรับ AD(X): C++

การสร้างสภาพแวดล้อมการพัฒนา

Android

สร้าง Prebuilt-Firebase-Library และฝัง AdKit SourceCode เพื่อใช้ AdKit แนะนำให้ใช้ Android Studio 3.0 ขึ้นไป

  1. 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
    
  2. เพิ่มสิ่งต่อไปนี้ลงในไฟล์ 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
    }
    
  3. ในกรณีที่ใช้ AD(X) หรือ ADOP กับบริการ AdMob-AdManager ให้เพิ่มสิ่งต่อไปนี้ลงในไฟล์ AndroidManifest.xml

    <application>
    <meta-data android:name="com.google.android.gms.ads.AD_MANAGER_APP" android:value="true" />
    <meta-data
        android:name="com.google.android.gms.ads.APPLICATION_ID"
        android:value="ca-app-pub-3940256099942544~3347511713"/> <!-- Sample value -->
    </application>
    
  4. ในกรณีที่ใช้ AD(X) ให้เพิ่มสิ่งต่อไปนี้ลงในไฟล์ build.gradle

    แอนดรอยด์ {
    ...
    การพึ่งพา {
        ...
        การใช้งาน "com.github.adxcorp.ADXLibrary_Android:adx-library-rewarded-video:1.16.2"
    }
    }
    

iOS

สร้าง Firebase-Framework และโค้ดแหล่งที่มาของ AdKit ที่รวมอยู่เพื่อใช้ฟีเจอร์นี้。

  1. ลากและวางโฟลเดอร์ HIVEAdKit/src และ HIVEAdKit/include ไปยังโปรเจกต์ XCode.

    • รวมไฟล์ทั้งหมดที่มีนามสกุล .cpp, .hpp และ .mm.
    • AdKit ให้โค้ดแบบสะพานสำหรับการใช้งานจริง.
  2. เพิ่ม HIVEAdKit/firebase_cpp_sdk/frameworks/ios/universal ไปที่ Project > Build Settings > Search Paths > Framework Search Path.

  3. เพิ่ม HIVEAdKit/firebase_cpp_sdk/include ไปที่ Project > Build Settings > Search Paths > Header Search Path.

  4. เพิ่ม -framework "firebase" และ -framework "firebase_admob" ไปที่ Project > Build Settings > Other Flags.

  5. เพิ่มสิ่งต่อไปนี้ในการตั้งค่า CocoaPods.

    $pod ‘Firebase/AdMob’
    
  6. ในกรณีที่ใช้ AD(X) ให้เพิ่มสิ่งต่อไปนี้ในการตั้งค่า CocoaPods

    $source 'https://github.com/adxcorp/AdxLibrary_iOS_Release.git'
    $pod 'ADXLibrary'
    
  7. เพื่อดาวน์โหลด SDK ล่าสุดของ iOS จาก Xcode คุณต้องดำเนินการตามคำสั่งต่อไปนี้

    pod install --repo-update
    

คีย์สำหรับโฆษณาทดสอบใน 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 อย่าลืมตรวจสอบการอัปเดตล่าสุด

การแจ้งเตือนการรวม Unity

  1. ปฏิบัติตามขั้นตอนด้านล่างเพื่อซิงค์ 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 หรือสูงกว่า.

  2. หาก 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