コンテンツにスキップ

Cpp

AD(X)のためのAdkit: C++

開発環境の作成

Android

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) #HIVEAdKitを使用するためにfirebase_cpp_sdkモジュールのプリビルド版を読み込む
    
    • [ケース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/src と HIVEAdKit/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
```

機能

AdKit C++のReward Video APIを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のサポート

以下は、iOS 14およびそれ以降のバージョンをサポートするためのAD(X)のSKAdNetworkリストです。AdKitPostprocessは2021年1月29日の更新に基づいています。最新の更新を確認するのを忘れないでください。

Unity統合通知

  1. 以下の手順に従って、Unity Engine 2019.4 以上の環境でADXUnityPackage 1.10.0 以上を同期します。

    • Unityエディタで、Assets > External Dependency Manager > iOS Resolver > Settings > Podfileにuse_frameworks!を追加およびフレームワークを静的にリンクをチェックし、保存します。

    • 追加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 に追加して、Unity Engine 2019.4 以上 の環境下で ADXUnityPackage 1.10.3 以上 を同期します。

  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