跳轉至

C++

Adkit for AD(X): C++

創建開發環境

Android

构建预构建的 Firebase 库和嵌入的 AdKit 源代码以使用 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) #設置安裝 HIVEAdKit 模組的路徑
    #在 add_library (MyGame ...) 之後導入 HIVEAdKit 庫
    add_subdirectory(${HIVEADKIT_DIR_PATH}) #加載 HIVEAdKit 庫和宏
    use_hiveadkit_prebuilt(${HIVEADKIT_DIR_PATH} MyGame) #導入庫的自動宏以構建目標
    
  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 路徑
    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"/> <!-- 示例值 -->
    </application>
    
  4. 如果使用 AD(X),请将以下内容添加到 build.gradle 文件中。

    android {
    ...
    dependencies {
        ...
        implementation "com.github.adxcorp.ADXLibrary_Android:adx-library-rewarded-video:1.16.2"
    }
    }
    

iOS

构建 Firebase-Framework 和包含的 AdKit 源代码以使用此功能。

  1. HIVEAdKit/srcHIVEAdKit/include資料夾拖放到XCode專案中。

    • 包含所有擁有.cpp、.hpp和.mm副檔名的檔案。
    • AdKit提供實際使用的橋接模式代碼。
  2. HIVEAdKit/firebase_cpp_sdk/frameworks/ios/universal 添加到 專案 > 建置設定 > 搜尋路徑 > 框架搜尋路徑

  3. 添加 HIVEAdKit/firebase_cpp_sdk/includeProject > Build Settings > Search Paths > Header Search Path

  4. 專案 > 建置設定 > 其他標誌中添加 -framework "firebase" 和 -framework "firebase_admob"。

  5. 將以下內容添加到 CocoaPods 設定中。

    $pod ‘Firebase/AdMob’
    
  6. 在使用 AD(X) 的情況下,將以下內容添加到 CocoaPods 設定中。

    $source 'https://github.com/adxcorp/AdxLibrary_iOS_Release.git'
    $pod 'ADXLibrary'
    
  7. 為了從 Xcode 下載最新的 iOS SDK,您需要執行以下命令。

    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
```

特徵

如果您使用 AdKit C++ 的獎勵視頻 API 與 Hive SDK,則發送日誌數據取決於實現的 RewardVideo API。日誌數據會發送到分析伺服器,並且此功能在 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

以下是支持 iOS 14 及更高版本的 SKAdNetwork AD(X) 列表。AdKitPostprocess 基于 2021 年 1 月 29 日的更新。别忘了检查最新的更新。

Unity 整合通知

  1. 按照以下程序在Unity 引擎 2019.4 或更高版本环境中同步ADXUnityPackage 1.10.0 或更高版本

    • 在 Unity 编辑器中,检查资产 > 外部依赖管理器 > iOS 解析器 > 设置 > 将 use_frameworks! 添加到 Podfile静态链接框架,然后保存。

    • 添加 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. 如果在 GoogleMobileAdsSettings 上移除了 App ID,请前往 Unity > Assets > Google Mobile Ads > Settings,勾选 Delay app measurement 复选框,然后再取消勾选。

問題檢查

如果您使用 Cocos2D-X 開發遊戲,Cocos2D-X 引擎中的某些 FlatBuffers 庫和 Firebase 嵌入的庫是重複的。為了防止重複,請盡量不要包含 FlatBuffers 庫或直接構建 Firebase 提供的開源庫。Firebase 包含以下庫。如果由於重複而導致庫崩潰,請使用 Firebase 開源庫 手動構建您的項目。

  • Curl
  • FlatBuffers
  • libuv
  • Nanopb
  • uWebSockets
  • Zlib