Cocos2dx ネイティブ広告の実装

ネイティブ広告では、完成した広告レイアウトを提供するのではなく、広告コンテンツ(部品)を提供することにより、オリジナルデザインで広告を配信する事ができます。タイトルや説明テキスト、アイコンなど、好きなデザインで配信する事が可能です。 広告インプレッション、広告クリックのトラッキングは、広告SDKで処理します。

サポートOS

  • Android
  • iOS

Android クラスとインタフェース

Android ネイティブ広告配信には、下記クラスを使用します。

  • CCGNSNativeAdRequest 非同期でネイティブ広告を取得するためのクラス
  • CCGNSNativeAd ネイティブ広告の情報を提供するためのクラス
  • CCGNSNativeAdRequestDelegate ネイティブ広告のロード結果を受け取るためのインタフェース
  • jp_co_geniee_sdk_ads_nativead_GNNativeAdActivityBridge ネイティブ広告のandroidのコールバックを仲介するクラス

iOS クラスとインタフェース

iOS ネイティブ広告配信には、下記クラスを使用します。

  • CCGNSNativeAdRequest.cpp: 非同期でネイティブ広告を取得するためのクラス
  • CCGNSNativeAd.cpp ネイティブ広告の情報を提供するためのクラス
  • CCGNSNativeAdRequestDelegate ネイティブ広告のロード結果を受け取るためのインタフェース
  • CCGNSNativeAdReqIOS.mm ネイティブ広告のiosのコールバックを仲介するクラス

SDK初期化

アプリのグローバルでSDK初期化します。

  1. グローバルでSDK初期化します。
    (例:広告表示画面初期化時。)
GNSAdSDK::CCGNNativeAdRequest::initialize("YOUR_ZONE_ID");
1
2

複数取得する場合のSDK初期化

アプリのグローバルでSDK初期化します。

  1. カンマ区切りのパラメータでSDK初期化します。
GNSAdSDK::CCGNNativeAdRequest::initialize("YOUR_ZONE_ID,YOUR_SSP_ZONE_ID2");
1
2

ネイティブ広告の取得

  1. CCGNNativeAd,CCGNNativeAdRequestをインポートします。
#include "CCGNNativeAd.h"
#include "CCGNNativeAdRequest.h"
1
2
3
  1. CCGNNativeAdRequestDelegateインタフェースを実装します。
class HelloWorld : public cocos2d::Scene, CCGNNativeAdRequestDelegate {
}
1
2
3
  1. CCGNNativeAdRequest のインスタンスを初期化します。
  • 初期化 API
GNSAdSDK::CCGNNativeAdRequest::initialize(const char* zoneId);
1
2
  • 初期化 API の使用例
GNSAdSDK::CCGNNativeAdRequest::initialize("YOUR_ZONE_ID");
1
2

YOUR_ZONE_ID は、Geniee内での枠の管理IDを設定します。

  • 複数のゾーンIDを使用した例

一度に複数の広告を取得したいとします。 ゾーンIDをカンマで区切って入力してください,

GNSAdSDK::CCGNSNativeAdRequest::initialize("1234567,8956240,1234643");
1
2
  1. CCGNNativeAdRequestDelegateインタフェースの実装クラスを設定します。
    ネイティブ広告ロードイベントのは、インタフェースの実装クラス経由で通知されます。
    CCGNNativeAdRequestDelegateインタフェースの実装した変数を設定します。
GNSAdSDK::CCGNNativeAdRequest::setDelegate(this);
1
2
  1. ネイティブ広告をロードします。
  • 1つのネイティブ広告をリクエストするとき
GNSAdSDK::CCGNNativeAdRequest::loadAds();
1
2
  • 複数のネイティブ広告をリクエストするとき
GNSAdSDK::CCGNSNativeAdRequest::multiLoadAds();
1
2
  1. CCGNNativeAdRequestDelegateインタフェースの実装
    CCGNNativeAdRequestDelegateのコールバック関数を実装し、
    ネイティブ広告のロードイベントの結果を受け取ります。
virtual void onNativeAdsLoaded(std::vector<GNSAdSDK::CCGNNativeAd*> nativeAds);
virtual void onNativeAdsFailedToLoad();
virtual bool onShouldStartInternalBrowserWithClick(const char* url);
1
2
3
4

受信したネイティブ広告CCGNNativeAdは、配列のnativeAds引数で渡されます。
複数ネイティブ広告の振り分け処理には、CCGNNativeAdzoneID情報で行います。
配列nativeAdsの要素数: 1個 CCGNNativeAdRequest 初期化時、ZONE_IDを1つ指定した場合

  • HelloworldScene.h の実装例:
#include "CCGNNativeAd.h"
#include "CCGNNativeAdRequest.h"
class HelloWorld : public cocos2d::Scene, CCGNNativeAdRequestDelegate
{
public:
    static cocos2d::Scene* createScene();
    virtual bool init();
    // a selector callback
    void menuCloseCallback(cocos2d::Ref* pSender);
    // implement the "static create()" method manually
    CREATE_FUNC(HelloWorld);
    // CCGNNativeAdRequestDelegate callback
    virtual void onNativeAdsLoaded(std::vector<GNSAdSDK::CCGNNativeAd*> nativeAds);
    virtual void onNativeAdsFailedToLoad();
    virtual bool onShouldStartInternalBrowserWithClick(const char* url);
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  • HelloworldScene.cpp の実装例:
#include "HelloWorldScene.h"
USING_NS_CC;
Scene* HelloWorld::createScene()
{
    return HelloWorld::create();
}
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    if ( !Scene::init() )
    {
        return false;
    }
    GNSAdSDK::CCGNNativeAdRequest::initialize("YOUR_ZONE_ID");
    GNSAdSDK::CCGNNativeAdRequest::setDelegate(this);
    GNSAdSDK::CCGNNativeAdRequest::loadAds();
    return true;
}
void HelloWorld::onNativeAdsLoaded(std::vector<GNSAdSDK::CCGNNativeAd*> nativeAds) {
    for (GNSAdSDK::CCGNNativeAd* _nativeAd : nativeAds) {
        log("NativeAd zoneID=%s", _nativeAd->zoneID);
        log("NativeAd advertiser=%s", _nativeAd->advertiser);
        log("NativeAd title=%s", _nativeAd->title);
        log("NativeAd description=%s", _nativeAd->description);
        log("NativeAd cta=%s", _nativeAd->cta);
        log("NativeAd icon_aspectRatio=%f", _nativeAd->icon_aspectRatio);
        log("NativeAd icon_url=%s", _nativeAd->icon_url);
        log("NativeAd icon_height=%d", _nativeAd->icon_height);
        log("NativeAd icon_width=%d", _nativeAd->icon_width);
        log("NativeAd screenshots_aspectRatio=%f", _nativeAd->screenshots_aspectRatio);
        log("NativeAd screenshots_url=%s", _nativeAd->screenshots_url);
        log("NativeAd screenshots_height=%d", _nativeAd->screenshots_height);
        log("NativeAd screenshots_width=%d", _nativeAd->screenshots_width);
        log("NativeAd app_appName=%s", _nativeAd->app_appName);
        log("NativeAd app_appid=%s", _nativeAd->app_appid);
        log("NativeAd app_rating=%f", _nativeAd->app_rating);
        log("NativeAd storeURL=%s", _nativeAd->app_storeURL);
        log("NativeAd targetAge=%s", _nativeAd->app_targetAge);
        // 広告を表示したとき実行
        _nativeAd->onTrackingImpression();
        // 広告をクリックしたとき実行
        _nativeAd->onTrackingClick();
    }
    log("NativeAd load success.");
}
void HelloWorld::onNativeAdsFailedToLoad() {
    log("NativeAd load fatal.");
}
bool HelloWorld::onShouldStartInternalBrowserWithClick(const char* url) {
    log("NativeAd click=%s", url);
    label->setString("NativeAd should start internal browser with click");
    return false;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

ネイティブ広告のレンダリング

受信したネイティブ広告の情報に基づいて、ネイティブ広告をレンダリングします。

  • 情報データの型は、CCGNNativeAdクラスの定義を参照します。

  • 情報データ( const char* 型)の値が未設定の場合、""となります。

  • 情報データ(int、double型)の値が未設定の場合、0となります。

    情報の名前 情報の内容
    zoneID const char* Geniee内での枠の管理ID
    advertiser const char* 広告主の名前
    title const char* feed広告のタイトル
    description const char* 広告説明
    cta const char* call to actionの文言
    icon_aspectRatio double icon画像の横縦比
    icon_url const char* icon画像のURL
    icon_height int icon画像の高さ
    icon_width int icon画像の幅
    screenshots_aspectRatio double screenshot画像の横縦比
    screenshots_url const char* screenshot画像のURL
    screenshots_height int screenshot画像の高さ
    screenshots_width int screenshot画像の幅
    app_appName const char* アプリの名前
    app_appid const char* アプリのID(ios:数値、Android:パッケージ)
    app_rating double アプリの評価
    app_storeURL const char* アプリのストアのURL
    app_targetAge const char* アプリの対象年齢

ネイティブ広告のインプレッション報告

  • ネイティブ広告がレンダリングされた時、広告のインプレッションを報告します。
  • インプレッション報告済みのネイティブ広告に対して、再度報告ができません。
  • 新しい広告表示には、ネイティブ広告を再取得する必要があります。
nativeAd->onTrackingImpression();
1
2

ネイティブ広告のクリックトラッキング

  • ネイティブ広告がクリックされた時、広告のランディングページを外部ブラウザで起動します。
nativeAd->onTrackingClick();
1
2

クリックのランディングページ画面遷移の制御

広告のランディングページは、デフォルトで外部ブラウザで起動しますが、
CCGNNativeAdRequestDelegateのコールバック関数を実装し、
ランディングページのURLを使ってアプリ内ブラウザで起動することが可能です。
また、関数の戻り値によって、外部ブラウザの起動を制御します。
true を返した場合、アプリ側landingURL をリクエストする必要があります。

  • false 外部ブラウザを起動します。
  • true 外部ブラウザを起動しません。
virtual bool onShouldStartInternalBrowserWithClick(const char* landingURL)
1
2
bool HelloWorld::onShouldStartInternalBrowserWithClick(const char* landingURL) {
    return false;
}
1
2
3
4

ネイティブ広告の再取得

  • 新しい広告を表示するには、次の2つのAPIのいずれかを使用してネイティブ広告を再取得する必要があります。
    • 1つのネイティブ広告をリクエストするとき
GNSAdSDK::CCGNNativeAdRequest::loadAds();
1
2
  • 複数のネイティブ広告をリクエストするとき
GNSAdSDK::CCGNSNativeAdRequest::multiLoadAds();
1
2
Last Updated: 2019/5/24 14:33:58