본문 바로가기
Unity3D

Admob 광고 붙이기 - 방법2

by CodeDiver 2014. 7. 31.


Admob 광고 붙이기


지난 번 Google Play 결제에 이어, 이번에는 구글 AdMob을 붙였습니다.

구글 AdMob은 한 달 전에 테스트 구현을 완료했었는데,
오늘 실제 게임에 붙이면서 생각치 못한 어려움을 만나 3시간동안 고생했습니다.
결국은 문제를 해결했고, 정상적으로 잘 작동하네요.


AdMob 구현의 최대 힌트는 배복근님이 어느 사이트에 올리신 코멘트였습니다.
안타깝게도 해당 글의 링크는 백업해두지 못하고, 내용만 저장해두었어서...
배복근님 허락 없이 원글의 일부를 아래에 올립니다. 양해 부탁드립니다.

========================================
월요일부터 막히는 점 있어 질문 드리옵니다 ㅠㅠ!
현재 제작중인 게임이 무료 게임에 광고만 달 예정이라 여러 광고 모듈을 알아보다가 최종적으로 다음의 AD@M 을 달기로 결정하였습니다.
AD@M SDK 를 받아서 이클립스에서 임시 프로젝트를 생성해 광고를 띄우는 것 까지는 성공했습니다만, 이걸 유니티3D 프로젝트에 적용하는 방법을 도무지 모르겠습니다;
구글링을 통해 plugins - Android 폴더에 bin, res, lib 폴더를 넣어줘야 한다는 사실만 인지하고, 그렇게 해서 빌드 해서 테스트 하니 광고는 전혀 나오질 않더군요.
AD@M 측에서 제공한 메뉴얼 문서대로만 해서 유니티와의 연동은 전혀 감이 잡히질 않습니다 ㅠㅠ
상세히 안내해주실분 안계신가요 ㅠㅠ??

배복근 안드로이드 플러그인은 에디터 창에서 플레이할 때는 작동하지 않고 예외를 뱉을겁니다. 디바이스에서 직접 테스트하셔야 해요
이상훈 배복근 아, 디바이스에서 테스트 했었습니다...만, 아무것도 안뜨더군요;
배복근 저는 애드립 붙여보려다 포기하고 구글 애드몹 붙였습니다. 유니티 플러그인을 팩키지로 배포하더라구요
배복근 https://code.google.com/p/google-mobile-dev/
이상훈 배복근 오...감사합니다. 혹시 간단한 사용법 정도 알 수 있을까요?
배복근 정말 간단하게 되있습니다. 애드몹 등록하셔서 UID만 가지고 있으면 패키지 불러와서 데모프리팹 올리고 UID만 입력하시면 됩니다. 데모소스코드가 워낙 짧아서 3~4라인이면 사용할 수 있습니다.
이상훈 배복근 파일 따로 추가 할 필요 없이 데모프리팹만 올리면 되는것인가요? 그리고 UID 는 테스트 할 때에도 꼭 필요한건가요?
지금 데모 프리팹을 게임 플레이 화면에 넣어두고 디바이스로 실행시켰는데 광고가 나오질 않아서요 ㅠㅠ 정말 쉬워보이는데 뭐가 문제인지 모르겠네요;
배복근 Plugins/Android 폴더 안에 admob sdk jar 파일 넣어두셔야 합니다.
배복근 그리고 readme 파일 참고하셔서 Android Manifest 파일도 추가/수정하셔야 합니다. UID는 반드시 있어야 할 겁니다.
이상훈 배복근 Exception: JNI: Init'd AndroidJavaClass with null ptr! 이러한 애러가 떨어지는데 혹시 짐작가시는 바 있으신지요?
배복근 그 에러가 에디터 창에서 실행할때만 발생하는겁니다. 디바이스에서는 문제 없을겁니다.
이상훈 배복근 아아 ㅠㅠ 떳습니다! 감사합니다 정말 감사합니다 ㅠ
이상훈 배복근 음...이것 터치해도 반응없이 움직이기만 하는데...원래 그런건가요 혹시??
배복근 유니티 Admob 광고 클릭 안될 때 참고 링크 : http://blog.naver.com/PostView.nhn?blogId=gh0oo0st&logNo=169454425
매니페스트 파일에 메타데이터 추가해줘야 합니다.
이상훈 배복근 정말 감사드립니다 깔끔하게 해결됬습니다
========================================

읽기에 좀 불편하실 것 같아서 아래에 요약 + 추가합니다.

1. 구글 AdMob - 유니티 플러그인 패키지가 배포되고 있습니다.
https://code.google.com/p/google-mobile-dev/

2. 압축 파일을 푼 후에, README 파일을 읽고 그대로 따라하면 쉽게 구현 성공하실 수 있습니다.

[ 준비물 ]
- Unity Pro 4.1.5 (untested on previous versions)
- Google AdMob SDK for Android
- AdMob publisher ID

[ 플러그인 설치 방법 ]
(1) 유니티 에디터를 실행하고 프로젝트 오픈
(2) 툴바에서 "Assets" -> "Import Package" -> "Custom Package" 실행
(3) AdMobUnityPlugin.unitypackage 파일을 열기
(4) 모든 파일을 "Import" 하기
(5) "Plugins/AdMobPlugin/" 폴더에 있는 AdMobPlugin 프리팹을 유니티 씬 화면에 드래그해서 끌어놓기

[ 안드로이드 설정 ]
(1) AndroidManifest.xml 파일이 없을 경우, Temp/StagingArea의 AndroidManifest.xml 파일을 Plugins/Android/으로 복사
(2) 아래 URL의 설명을 참고해서 Plugins/Android/AndroidManifest.xml 의 activity와 permissions를 설정
   https://developers.google.com/mobile-ads-sdk/docs#android
(3) Google AdMob SDK jar 를 Plugins/Android 폴더에 드래그해서 추가하기

3. 배복근님의 팁
(1) AdMob 유니티 플러그인 패키지 설치 이외에, Android AdMob SDK jar 파일도 추가해야합니다. -(어디에? 유니티의 Plugins/Android 폴더 안에)
(2) AndroidManifest.xml 파일도 추가/수정하셔야 합니다.
(3) AdMob UID도 반드시 있어야 합니다. (AdMobPluginDemos!crip.cs 파일 안의 AdMobPlugin.CreateBannerView("INSERT_YOUR_AD_UNIT_ID_HERE", <= 여기에 붙여넣기)
(4) Exception: JNI: Init'd AndroidJavaClass with null ptr! 에러는 에디터 창에서 실행할때만 발생하는 것으로, 디바이스에서 실행하면 발생하지 않는 문제입니다.
(5) 디바이스에서 실행되는데, 터치시 반응이 없을 때 AndroidManifest.xml 파일에서 메타데이터를 수정해야 합니다 (http://blog.naver.com/PostView.nhn?blogId=gh0oo0st&logNo=169454425 참고)



여기에 제 구현팁을 추가합니다.
(1) 제 코드에서 추가한 내용은 아래 두 줄 밖에 없네요. 나머지는 프리팹에 등록된 내용이 알아서 다 해 줍니다.
if(activate == true)
AdMobPlugin.ShowBannerView();
else
AdMobPlugin.HideBannerView();

(2) AdMobPluginDemos!crip.cs 파일에서 아래 내용만 수정했습니다.
AdMobPlugin.CreateBannerView("INSERT_YOUR_AD_UNIT_ID_HERE", <= 여기에 AdMob UID 붙여넣기
AdMobPlugin.AdSize.Banner,
false); // true 로 설정하면 배너가 화면 상단에, false 는 화면 하단에 붙습니다.

(3) PC에서, 유니티 에디터 실행시 Exception: JNI 에러 때문에 게임 실행 및 디버깅이 안될 수도 있습니다.
이를 방지하기 위해 Exception : JNI 에러가 발생한 코드를 #ifdef UNITY_ANDROID && !UNITY_EDITOR ~ #endif 로 감싸주었습니다.

< AdMobPlugin.cs 파일 >
#if UNITY_ANDROID && !UNITY_EDITOR
       SetCallbackHandlerName(gameObject.name);
#endif


(4) AdMob 플러그인 샘플에 포함된 AdMobPlugin 프리팹을 scene에 넣을 때, 제가 만든 디렉토리 아래에 넣었더니 (에러는 안나는데) 배너가 화면에 출력되지 않는 현상이 있었습니다.
AdMobPlugin 프리팹을 루트 디렉토리로 옮겼더니 디바이스에서 정상 출력되는 것을 확인했습니다.


결제와 광고를 Unity 플러그인 방식으로 다 붙였습니다만,
여러 플랫폼과 여러 결제 환경등에 맞춰서 유연하게 빌드하려면
플러그인 방식보다는 해당 개발 환경 (Andorid 빌드, iOS 빌드) 으로 준비하는 것이 더 나을 것 같습니다.

저도 이번 게임은 일단 속도전으로 가기 위해서 플러그인 방식으로 다 구현하고 들어가고 있지만,
다음 프로젝트부터는 개발 환경 빌드 방식으로 진행해 봐야겠네요.



출처: http://mypi.ruliweb.daum.net/mypi.htm?num=3405&id=zqvwod_da