跳转至

C++

Adkit for AD(X): C++

创建开发环境

安卓

构建 Prebuilt-Firebase-Library 和嵌入式 AdKit 源代码以使用 AdKit。推荐使用 Android Studio 3.0 及更高版本。

  1. 外部原生构建

    • [案例 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/include 添加到 项目 > 构建设置 > 搜索路径 > 头文件搜索路径

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

特性

如果您使用 Hive SDK 的 AdKit C++ 中的奖励视频 API,则发送日志数据取决于实现的 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 Engine 2019.4或更高版本环境中同步ADXUnityPackage 1.10.0或更高版本

    • 在Unity编辑器中,检查Assets > External Dependency Manager > iOS Resolver > Settings > 将use_frameworks!添加到Podfile静态链接框架,然后保存。

    • 添加 OMSDK_Mopub.xcframework (Pods/mopub-ios-sdk/Frameworks/OMSDK_Mopub.xcframework) 在 iOS 项目 > 目标 > 构建阶段 > 嵌入框架.

    • 添加 FBSDKCoreKit_Basics.xcframework (Pods/FBSDKCoreKit_Basics/XCFrameworks/FBSDKCoreKit_Basics.xcframework) 在 Targets > 构建阶段 > 嵌入框架 以同步 ADXUnityPackage 1.10.3 或更高版本Unity 引擎 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