[D_024] admob 등록
- 참고 글
http://discuss.cocos2d-x.org/t/cocos3-0-tutorial-integrate-admob-google-play-services-with-cocos2d-x-v3-0-final/12798
- admob 사이트
https://apps.admob.com/#home
1) 프로젝트 폴더 내에서 python build_native.py 실행
2) eclipse에서 프로젝트 import
- 3.2 / 3.3 버전에서 프로젝트 import 차이점 확인
3) ADT 폴더 \sdk\extras\google\google_play_services\libproject 내에 있는
google-play-services_lib 폴더를 프로젝트 폴더 \proj.android 폴더에 복사
4) eclipse에서 복사한 google-play-services_lib을 import시킴
5) properties 에서 android -> add를 눌러 추가한 라이브러리를 더해줌
6) 프로젝트의 android manifest에 내용 추가
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/> <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
7) 프로젝트의 src->org.cocos2dx.cpp -> AppActivity.java 수정(전면 교체)
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | /****************************************************************************Copyright (c) 2008-2010 Ricardo Quesada Copyright (c) 2010-2012 cocos2d-x.org Copyright (c) 2011 Zynga Inc. Copyright (c) 2013-2014 Chukong Technologies Inc. http://www.cocos2d-x.org ****************************************************************************/ /* Copyright (c) 2014 Mudafar GPLv3 */ package org.cocos2dx.cpp; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.cocos2dx.lib.Cocos2dxActivity; import android.annotation.TargetApi; import android.graphics.Color; import android.graphics.Point; import android.os.Build; import android.os.Bundle; import android.view.Display; import android.view.View; import android.view.WindowManager; import android.widget.LinearLayout; import com.google.android.gms.ads.AdSize; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdView; public class AppActivity extends Cocos2dxActivity { private static AppActivity _appActiviy; private AdView adView; private static final String AD_UNIT_ID = "ca-app-pub-0000000000000000/0000000000"; // Helper get display screen to avoid deprecated function use private Point getDisplaySize(Display d) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { return getDisplaySizeGE11(d); } return getDisplaySizeLT11(d); } @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) private Point getDisplaySizeGE11(Display d) { Point p = new Point(0, 0); d.getSize(p); return p; } private Point getDisplaySizeLT11(Display d) { try { Method getWidth = Display.class.getMethod("getWidth", new Class[] {}); Method getHeight = Display.class.getMethod("getHeight", new Class[] {}); return new Point(((Integer) getWidth.invoke(d, (Object[]) null)).intValue(), ((Integer) getHeight.invoke(d, (Object[]) null)).intValue()); } catch (NoSuchMethodException e2) // None of these exceptions should ever occur. { return new Point(-1, -1); } catch (IllegalArgumentException e2) { return new Point(-2, -2); } catch (IllegalAccessException e2) { return new Point(-3, -3); } catch (InvocationTargetException e2) { return new Point(-4, -4); } } @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); int width = getDisplaySize(getWindowManager().getDefaultDisplay()).x; LinearLayout.LayoutParams adParams = new LinearLayout.LayoutParams( width, LinearLayout.LayoutParams.WRAP_CONTENT); adView = new AdView(this); adView.setAdSize(AdSize.BANNER); adView.setAdUnitId(AD_UNIT_ID); AdRequest adRequest = new AdRequest.Builder() .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) .addTestDevice("HASH_DEVICE_ID") .build(); adView.loadAd(adRequest); adView.setBackgroundColor(Color.BLACK); adView.setBackgroundColor(0); addContentView(adView,adParams); _appActiviy = this; } public static void hideAd() { _appActiviy.runOnUiThread(new Runnable() { @Override public void run() { if (_appActiviy.adView.isEnabled()) _appActiviy.adView.setEnabled(false); if (_appActiviy.adView.getVisibility() != 4 ) _appActiviy.adView.setVisibility(View.INVISIBLE); } }); } public static void showAd() { _appActiviy.runOnUiThread(new Runnable() { @Override public void run() { if (!_appActiviy.adView.isEnabled()) _appActiviy.adView.setEnabled(true); if (_appActiviy.adView.getVisibility() == 4 ) _appActiviy.adView.setVisibility(View.VISIBLE); } }); } @Override protected void onResume() { super.onResume(); if (adView != null) { adView.resume(); } } @Override protected void onPause() { if (adView != null) { adView.pause(); } super.onPause(); } @Override protected void onDestroy() { adView.destroy(); super.onDestroy(); } } | cs |
본 내용 중 파란색으로 블럭표시된 곳에 광고 id를 삽입하면 된다.
8) 프로젝트 폴더의 win32 솔루션 실행 후, AdmobHelper.h와 AdmobHelper.cpp 추가 후, 아래 내용 붙여넣기
/* Copyright (c) 2014 Mudafar GPLv3 */ #ifndef __ADMOB_HELPER_H_ #define __ADMOB_HELPER_H_ class AdmobHelper { public: static void hideAd(); static void showAd(); static bool isAdShowing; }; #endif // __ADMOB_HELPER_H_
/*
Copyright (c) 2014 Mudafar GPLv3 */ #include "AdmobHelper.h" #include "cocos2d.h" bool AdmobHelper::isAdShowing = true; #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include "platform/android/jni/JniHelper.h" #include <jni.h> //#include <android/log.h> const char* AppActivityClassName = "org/cocos2dx/cpp/AppActivity"; void AdmobHelper::hideAd() { cocos2d::JniMethodInfo t; if (cocos2d::JniHelper::getStaticMethodInfo(t, AppActivityClassName, "hideAd", "()V")) { t.env->CallStaticVoidMethod(t.classID, t.methodID); t.env->DeleteLocalRef(t.classID); isAdShowing = false; } } void AdmobHelper::showAd() { cocos2d::JniMethodInfo t; if (cocos2d::JniHelper::getStaticMethodInfo(t, AppActivityClassName, "showAd", "()V")) { t.env->CallStaticVoidMethod(t.classID, t.methodID); t.env->DeleteLocalRef(t.classID); isAdShowing = true; } } #else void AdmobHelper::hideAd() { CCLOG("hideAd() called"); isAdShowing = false; return; //nothing } void AdmobHelper::showAd() { CCLOG("showAd() called"); isAdShowing = true; return; //nothing; } #endif9) HelloWorldScene.cpp의 init부분 마지막에 코드 추가
//////////////////////////////////////////////////////////////////////////
//Toggle ad when touch the screen auto listener = EventListenerTouchOneByOne::create(); listener->setSwallowTouches(true); listener->onTouchBegan = [](Touch* touch, Event* event) { if (AdmobHelper::isAdShowing) AdmobHelper::hideAd(); else AdmobHelper::showAd(); return true; }; _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this); //////////////////////////////////////////////////////////////////////////10) eclipse에서, 프로젝트 폴더 내의 jni->Android.mk에 추가한 cpp파일을 등록해줌
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := cocos2dcpp_shared LOCAL_MODULE_FILENAME := libcocos2dcpp LOCAL_SRC_FILES := hellocpp/main.cpp \ ../../Classes/AppDelegate.cpp \ ../../Classes/HelloWorldScene.cpp \ ../../Classes/AdmobHelper.cpp LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static include $(BUILD_SHARED_LIBRARY) $(call import-module,2d) $(call import-module,audio/android) $(call import-module,Box2D)