月別アーカイブ: 2014年4月

cocos2d-xで AID のポップアップ型広告を実装する方法(iOS, Android)

スマホ向け全画面広告を提供されているAID様のポップアップ型広告のモジュールをcocos2d-xに組み込む場合、通常のネイティブの場合とやや異なるため、こちらにまとめました。

AID様のモジュールについてはこちらをご参照ください。
http://www.aid-ad.jp/

 
まず、cocos2d-xのプロジェクト構成の確認から行います。

プロジェクト名を「TestProject」とします。
TestProject/ 以下の追加/修正を行うファイル構成を以下にまとめます。

Classes/
	Android/AdViewManager.cpp	// add
	Android/AdViewManager.h		// add
	HelloWorld.cpp
	HelloWorld.h
proj.android/
	jni/Android.mk/Android.mk
	libs/jp.live_aid.aid.jar	// add
	src/com/loopsessions/TestProject/TestProject.java
proj.ios/
	AdViewManager.h		// add
	AdViewManager.mm	// add
	AidAd.framework		// add
	AppController.h
	AppController.mm

 

【iOSでの実装方法】

基本的な手順や実装については以下を参考にしてください。
http://report.aid-ad.jp/docs/ios/manual/index.html

AdViewManager.h / AdViewManager.mm を新規作成します。

// AdViewManager.h

#ifndef ADVIEW_MANAGER_H
#define ADVIEW_MANAGER_H
 
class AdViewManager
{
public:
	static void setAidAdView();
};
 
#endif
// AdViewManager.mm

#import "AdViewManager.h"
#import "AppController.h"
 
void AdViewManager::setAidAdView()
{
	AppController *appController = (AppController *)[UIApplication sharedApplication].delegate;
	[appController setAidAdView];
}

AppController.h に実装するメソッドの宣言を記述します。

// AppController.h

#import <UIKit/UIKit.h>

@class RootViewController;

@interface AppController : NSObject <UIApplicationDelegate>
{
    UIWindow *_window;
    RootViewController *_viewController;
}

- (void)setAidAdView;

@end

AppController.mm に広告を呼び出すメソッドを記述します。

// AppController.mm

- (void)setAidAdView
{
	NSString *kMEDIA_CODE = @"idxxxxxxxx";
	AidAdAgent* agent = [AidAd agentForMedia:kMEDIA_CODE];
	[agent setDialogBlocker:self];
	[agent startLoading];
	
	[agent showDialog];
}

HelloWorld.cpp で広告を表示したい場合、呼び出したいタイミングで以下を実行してください。

// HelloWorld.cpp

// 呼び出したいタイミングで以下を実行
AdViewManager::setAidAdView();

 

【Androidでの実装方法】

基本的な手順や実装については以下を参考にしてください。
http://report.aid-ad.jp/docs/android/manual/index.html

Androidの場合は、ファイル構成が変更したことをMakeファイル(Android.mk)に記述する必要があります。

# Android.mk

LOCAL_SRC_FILES := hellocpp/main.cpp \
                   ../../Classes/AppDelegate.cpp \
                   ../../Classes/HelloWorld.cpp \
                   ../../Classes/Android/AdViewManager.cpp

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../Classes/Android

(略)

AdViewManager.cpp / AdViewManager.h を新規作成します。
AdViewManager.h はiOSと同じ内容です。

// AdViewManager.cpp

#include "AdViewManager.h"
#include <jni.h>
#include "platform/android/jni/JniHelper.h"

// パッケージ名 + Javaクラス名
#define CLASS_NAME "com/loopsessions/TestProject/TestProject"

using namespace std;
using namespace cocos2d;

void AdViewManager::setAidAdView()
{
	cocos2d::JniMethodInfo t;
	if (cocos2d::JniHelper::getStaticMethodInfo(t, CLASS_NAME, "setAidAdView", "()V")) {
		t.env->CallStaticVoidMethod(t.classID, t.methodID);
		t.env->DeleteLocalRef(t.classID);
	}
}

TestProject.java に広告を呼び出すメソッドを記述します。

// TestProject.java

	(略)

public class TestProject extends Cocos2dxActivity
{
	(略)
	private static AdController mAidAdController = null;
	(略)

	public static void setAidAdView() {
		activity.runOnUiThread(new Runnable() {
			public void run() {
				if (mAidAdController == null) {
					String MEDIA_CODE = "idxxxxxxxx";
					mAidAdController = new AdController(MEDIA_CODE, activity);
				}
				mAidAdController.startPreloading();
				mAidAdController.showDialog(AdController.DialogType.ON_EXIT);
			}
		});
    }

}

広告表示の呼び出しは、iOS/Android共通のコードになります。

// HelloWorld.cpp

// 呼び出したいタイミングで以下を実行
AdViewManager::setAidAdView();