본문 바로가기

안드로이드 - ETC

Android Admob SDK New Version (2010.10.12 Version) - ListView에 올리기


이전 버전과 달리 새로운 버전의 SDK에서는 기존과 달리 설정을 해줘야 되는 부분이 늘었습니다.
설정법이 바뀜에도 불구하고 여기 저기 포스트를 찾아봐도 내용이 별로 없어서 3일간 고생해서 겨우겨우
ListView에 달게 되었습니다. ㅠ

일단 Admob 에 가입이 되었다는 전제하에 글을 쓰도록 하겠습니다.
가입이 완료된후 Install code를 받게 되는데 Admob SDK도 다운을 받아 본인의 프로젝트에 jar를 설정해야 합니다.


Download AdMob Android SDK를 다운받아 보면 내부에 jar, javadoc 이 있습니다.
jar 파일은 이클립스에서 jar 추가를 하시면 되고, javadoc 폴더 안에 index.html을 누르게 되면 설치 가이드가 설명 되어 있습니다.
좀 더 자세한 설명을 원하시는 분들을 위해 파일 한개 첨부합니다.


일단 index.html을 보시게 되면

  <!-- The application's publisher ID assigned by AdMob -->
  <meta-data android:value="YOUR_ID_HERE" android:name="ADMOB_PUBLISHER_ID" />
       
  <!-- AdMobActivity definition -->
  <activity android:name="com.admob.android.ads.AdMobActivity"
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
      android:configChanges="orientation|keyboard|keyboardHidden" />

  <!-- Track Market installs -->         
  <receiver android:name="com.admob.android.ads.analytics.InstallReceiver" android:exported="true">
    <intent-filter>
      <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
  </receiver>
       
  </application>

나머지는 동일하게 넣으시면 되구 YOUR_ID_HERE 부분에 자신에 Publisher ID를 넣으시면 됩니다.
이전과 달라진 점은  <!-- AdMobActivity definition --> 와 <!-- Track Market installs --> 
이부분이 이전 버전에는 넣지 않아도 되었습니다.
하지만 새로운 버전에서 이부분을 넣지 않으면 Admob Activity를 추가해 달라는 error를 log cat에서
보실수 있을 겁니다.

manifest 상단에도 아래와 같이 넣으셔야 합니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.example.admob.lunarlander"
...
 
 
인터넷을 사용할수 있도록 manifest 아래에 같이 넣으셔야 하겠습니다.
  <!-- AdMob SDK requires Internet permission -->
  <uses-permission android:name="android.permission.INTERNET" />
</manifest>
 
attr.xml 파일 만드셔서 아래와 같이 넣으셔야 합니다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
  <declare-styleable name="com.admob.android.ads.AdView">
    <attr name="backgroundColor" format="color" />
    <attr name="primaryTextColor" format="color" />
    <attr name="secondaryTextColor" format="color" />
    <attr name="keywords" format="string" />
    <attr name="refreshInterval" format="integer" />
  </declare-styleable>
</resources>
 
이렇게만 설정해 주시고 자신의 layout파일을 만드셔야 하는데 이부분이 중요합니다.
아무리 설정 잘해도 layout 잘못 설정 하면 광고가 나오질 않게 됩니다.(ListView에 한함)
 
아래 코드는 index.html에 있는 코드입니다.
package는 본인의 package명을 넣으셔야 하구요~
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res/com.admob.android.example"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  
  <com.admob.android.ads.AdView  
    android:id="@+id/ad" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    app:backgroundColor="#000000"
    app:primaryTextColor="#FFFFFF"
    app:secondaryTextColor="#CCCCCC"
    app:keywords="Android Game"
  />
                
</LinearLayout>
중요한 부분에만 색을 넣어 보았습니다.
상단에 있는 코드는 ListView가 아니기에 설정만 잘하시면 분명히 나올겁니다.
하지만 애뮬레이터에서는 잘 나오질 않습니다.제가 2-3일 테스트를 하면서 3번정도 나오는걸 보았습니다.
귀찮으시더라도 핸드폰에 넣으셔서 확인해 보시는게 좋을것 같습니다.
 
저같은 경우는 핸드폰을 꽂게 되면 motodev에서 device를 잡아줘서 그쪽에서 설치 및 삭제를 지속적으로 
했습니다.
 
각설하고 하단의 코드를 봐주십시요.
 
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:myapp="http://schemas.android.com/apk/res/com.loveroid.conversationfree"
        android:orientation="vertical" 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    <com.admob.android.ads.AdView
               android:id="@+id/ad"
               android:layout_width="fill_parent" 
               android:layout_height="wrap_content"
               android:layout_alignParentBottom="true"
               myapp:backgroundColor="#000000"
               myapp:primaryTextColor="#FFFFFF"
               myapp:secondaryTextColor="#CCCCCC"
               myapp:refreshInterval="30"/>
    <ListView android:id="@+id/list"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_above="@id/ad"/>
</RelativeLayout>
 
잘 보시면 LinearLayout 이 아니고 RelativeLayout으로 바뀌어 있습니다.
자신의 package명을 하단과 같이 기술해 주고

xmlns:myapp="http://schemas.android.com/apk/res/com.loveroid.conversationfree"

중요한건 이제 이부분입니다.

잘 보시면 광고는 밑으로 가게끔 설정하려고 하는데 광고를 위로 놓고 리스트를 밑에 놓았습니다.
코드를 보시면 금방 이해가 가실겁니다.
 
광고부분에는 android:layout_alignParentBottom="true" 를 넣어서 부모의 하단에 나올수 
있도록 설정해 두었고요.
ListView에서는 android:layout_above="@id/ad" ad라는 id를 가진놈의 위에 나오도록 
설정이 되어 있네요.
 
만약 android:layout_alignParentBottom="true" 를 넣지 않으셨다면 ListView에 List 및 
광고가
같이 나오지 않게 될것입니다.
 
초반에 설정할때 하도 안되어서 android:layout_above 이부분을 android:layout_below 으로 
바꿔서
해보기도 했습니다. (below로 하게 되면 광고가 alignParentBottom을 하지 않아도
광고 및 list가 나오긴 합니다.하지만 광고가 상단에 나오게 되네요..흠 )
 
이렇게만 설정해 주신다면 광고 및 List가 확실하게 나오게 될것입니다. 
 
애뮬레이터에서 광고를 나오게 하기는 쉽지 않습니다.
그냥 폰에 직접 넣으셔서 하는게 제일 빠른 길이라 생각하고 Admob이 한국의 광고를 잘 가져오지 않습니다.
그래서 광고가 잘 나오지 않는 단점이 있습니다.
 
광고가 잘 나오지 않으면 나오는지 안나오는지 알수가 없으니 HouseAds를 설정하시라고 권하고 싶습니다.
 
 
House ads를 넣으시면 만약 광고가 나오지 않더라고 default로 본인이 설정한 url로 광고가 나오게
되도록 되어 있습니다.
 
만약 본인의 어플이 2개 이상이라면 서로 house ads를 넣으시면 서로 광고가 될수 있겠죠.