반응형

안드로이드 스튜디오 OPENGL ES를 사용해서 앱을 만들고 Admob을 붙일 때는 Activity와 혼합으로 적용시켜야 합니다. 구글 OPENGL ES  예제로 하면 Admob를 붙이지 못합니다.

 

참고로 안드로이드 스튜디오 OPENGL ES 공식 설명 및 예제 

https://developer.android.com/develop/ui/views/graphics/opengl/environment


 

기본 Activity 나 Surface 사용시 Admob 붙이는 예제는 아래 포스트를 참고하세요

또는 Admob를 등록 하는 방법도 아래 포스트를 참고하세요

https://dxkor2.tistory.com/216


build.gradle 에서

안드로이드 스튜디오(코틀린)OPENGL ES 사용시 Admob 붙이기

 

allprojects {
    repositories {
        google()
    }
}


dependencies {

    implementation 'com.google.android.gms:play-services-ads:19.5.0'

build.gradle에 위와 같이 추가합니다.

implementation 'com.google.android.gms:play-services-ads:19.5.0'

 

아래는 2023.9 월 최선 버전입니다.(sdk 33)

implementation 'com.google.android.gms:play-services-ads:22.3.0'

새로 나온 버전은 아래에서 확인하세요

developers.google.com/admob/android/quick-start#update_your_androidmanifestxml


AndroidManifest.xml 에서 

안드로이드 스튜디오(코틀린)OPENGL ES 사용시 Admob 붙이기

 

<uses-permission android:name="android.permission.INTERNET"/>

인터넷 허가 와

<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

 

위 소스 그림에선 빼먹었지만 2023.8.31 SDK33 이후로 빌드 할 경우 광고를 붙이기 위해선 위 구문도 같이 추가되어야 합니다.

 

<meta-data
    android:name="com.google.android.gms.ads.APPLICATION_ID"
    android:value="ca-app-pub-3940256099942544~3347511713"/>

AndroidManifest.xml 에 위와 같이 추가해 줍니다.

 

ca-app-pub-3940256099942544~3347511713

이 부분은 앱을 출시할 시 자신의 Admob ID로 바꾸어 줘야 합니다.


OPENGL ES 와 ACTIVITY를 혼합할 layout 을 만듭니다.

 


<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation = "vertical"
    android:layout_width = "fill_parent"
    android:layout_height = "fill_parent">

    <android.opengl.GLSurfaceView
        android:id="@+id/glSurfaceView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>

    <com.google.android.gms.ads.AdView
        xmlns:ads="http://schemas.android.com/apk/res-auto"
        android:id="@+id/adView3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        app:layout_constraintTop_toTopOf="parent"
        ads:adSize="BANNER"
        app:adUnitId="ca-app-pub-/">
    </com.google.android.gms.ads.AdView>

</FrameLayout>

위 처럼  FrameLayout으로 만듭니다.

위에서 볼것은

android:id="@+id/glSurfaceView"

GlSurface 출력 부분 ID

 

android:id="@+id/adView3"

Admob 출력 부분 ID

 

app:adUnitId="ca-app-pub-/">

"ca-app-pub-/"  본인의 Admob 의 Id를 넣어야 합니다.


MainActivity 에서...

안드로이드 스튜디오(코틀린)OPENGL ES 사용시 Admob 붙이기

1 OPENGL SURFACE를 선언합니다.
2 애드몹 View를 선언합니다.
3 애드몹을 출력하기 위해서  초기에 init 을 호출 해 줍니다.

 

class MainActivity : AppCompatActivity() {
  
  
  private lateinit var glView: GLSurfaceView
  
  private var mAdView: AdView?=null
  
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
  

    MobileAds.initialize(this) //애드몹 초기화?!

안드로이드 스튜디오(코틀린)OPENGL ES 사용시 Admob 붙이기

1 Open gl surface와 애드몹 출력을 위한 activity를 합성하는 부분
2 애드몹 광고를 실제 출력 시키는 부분
3 게임 메인 스레드 부분

참고로 게임 스레드는 onCreate에 내부에 만들면 됩니다.
스레드에서 Opengl 랜더를 호출하기 위해선 아래와 같이 호출하면 됩니다.(위와 같이 변수를 설정했을 경우)

glView.requestRender()

 

반응형

+ Recent posts