한국어
Qt
 
안드로이드용 Qt/QML 로 작성된 앱에 AdMob 배너 다는 방법을 알아보자. 시작하기전에 먼저 AdMob 계정을 생성 후 새로운 앱을 추가하여 앱ID를 발급받아야 한다.
 
QtCreator 에서 새로운 프로젝트를 생성하고 다음 링크에 따라 안드로이드 템플릿을 추가한다.
 

QtAndroidTools 이용

QtAndroidTools 는 QML에서 일부 기본 Android 기능에 대한 액세스를 단순화할 수 있는 편의기능을 제공하는 오픈소스 프로젝트이다. Android 앱 권한을 요청, Android 시스템 알림 표시, 화면 방향 변경 등 꽤 유용한 기능을 제공하는데 그 중 AdMob 배너 표시 기능을 사용해 본다.
 
QtAndroidTools 를 프로젝트 디렉토리에 복사하고 .pro 파일에 다음 줄을 포함한다.
include(QtAndroidTools/QtAndroidTools.pri)
 
QtAndroidTools/QtAndroidTools.pri 를 포함하고 .pro 파일 변수 ANDROID_PACKAGE_SOURCE_DIR 에 경로를 정의한다.
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
 
다음으로 컴파일에 포함/제외할 라이브러리 도구를 지정하기 위한 정의 레이블을 .pro 에 추가한다.
DEFINES += \
QTAT_APP_PERMISSIONS \
QTAT_APK_EXPANSION_FILES \
QTAT_APK_INFO \
QTAT_SCREEN \
QTAT_SYSTEM \
QTAT_BATTERY_STATE \
QTAT_SIGNAL_STRENGTH \
QTAT_IMAGES \
QTAT_NOTIFICATION \
QTAT_ADMOB_BANNER \
QTAT_ADMOB_INTERSTITIAL \
QTAT_ADMOB_REWARDED_VIDEO \
QTAT_PLAY_STORE \
QTAT_GOOGLE_ACCOUNT \
QTAT_GOOGLE_DRIVE \
QTAT_SHARING \
QTAT_USER_MESSAGING_PLATFORM \
QTAT_AUDIO
 
main() 본문에 라이브러리 초기화 코드를 추가한다.
QtAndroidTools::initializeQmlTools();
 
배너 로드를 허용하려면 앱에 다음 권한이 필요하다.
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.WRITE_EXTERNAL_STORAGE
 
다음은 그렇게 하기위한 AndroidManifest.xml 의 일부이다.
...
<!-- Required to download files from Google Play -->
<uses-permission android:name="android.permission.INTERNET" />

<!-- Required to poll the state of the network connection and respond to changes -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!-- Required to read and write the expansion files on shared storage -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
그리고 AdMob 필수 패키지를 설치해야 한다. 설치해야 하는 패키지는 build.gradle 에 추가한다.
dependencies {
....
implementation 'com.google.android.gms:play-services-ads:19.+'
}
 
이제 QML 에 배너를 추가할 수 있다:
import QtAndroidTools 1.0
...
QtAndroidAdMobBanner {
    id: banner

    anchors.horizontalCenter: parent.horizontalCenter

    unitId: "ca-app-pub-3940256099942544/6300978111" // id for Test

    type: QtAndroidAdMobBanner.TYPE_SMART_BANNER // TYPE_BANNER
    keywords: ["game", "media", "entertainment"]
    nonPersonalizedAds: false

    Component.onCompleted: show()
}
 
unitId는 AdMob 사이트 내에서 새 광고 단위를 만들 때 생성되는 문자열이다. 앱에 연결된 광고를 식별하는 데 사용됩니다. 이 ID를 사용하여 이 광고 단위에서 얼마나 벌었는지 알 수 있다. keywords 는 배너 광고를 더 잘 타겟팅하는 데 필요한 선택적 키워드 목록이다.
nonPersonalizedAds 프로퍼티는 선택 사항이다(기본값은 false). 광고 타겟팅에 수집된 사용자 개인 데이터를 사용하지 않으려면 이 속성을 true로 설정한다. type 프로퍼티는 표시하려는 배너 유형이며 가능한 값은 다음과 같다.
TYPE_BANNER
TYPE_FULL_BANNER
TYPE_LARGE_BANNER
TYPE_MEDIUM_RECTANGLE
TYPE_SMART_BANNER
TYPE_WIDE_SKYSCRAPER
TYPE_ADAPTIVE_BANNER
 
QtAndroidAdMobBanner 아이템은 광고 상태에 대해 알려주는 다음 시그널을 방출한다.
onLoadError
onLoading
onLoaded
onClosed
onClicked
 
광고 로드에 문제가 있는 경우 호출되는 onLoadError 시그널의 errorId 를 테스트하여 문제를 파악할 수 있다. 가능한 값은 다음과 같다.
ERROR_INTERNAL
ERROR_NETWORK
ERROR_INVALID_REQUEST
ERROR_NO_FILL
 
배너를 로드하고 표시하려면 show() 함수를 호출하고 숨기려면 hide() 함수를 호출한다. reload() 함수는 새 배너를 강제로 다시 로드한다.
banner.show()
banner.hide()
banner.reload()
 
배너는 QML 창 위에 있는 네이티브 Android View 이다. 즉, 모든 QML 아이템 위에 유지되고 배너 위에 아무 것도 배치할 수 없다.

photo_2021-12-04_16-40-46.jpg

 

번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 86122
179 z-order 를 컨트롤 하기위한 방법 makersweb 2015.05.13 6592
178 Qml 사용자 ScrollBar 구현 file makersweb 2015.07.24 6233
177 QQuickImageProvider 를 이용한 Qml 에서 이미지 표시 makersweb 2015.10.18 6005
176 Qt의 시그널 슬롯 시스템 file makersweb 2015.10.20 23640
175 Qt의 스레드간 시그널 슬롯의 커넥션타입 [1] makersweb 2015.10.24 10202
174 Qt 프로그래밍의 시작 makersweb 2015.10.25 14396
173 QtConcurrent를 이용하여 쓰레드를 만드는 방법과 MapReduce file makersweb 2016.01.24 9472
172 Ubuntu Linux에서 Qt Creator 설치 file makersweb 2016.03.06 10675
171 멀티 스레드환경, 스레드에 안전한 이벤트처리 makersweb 2016.10.27 5037
170 QString 문자열에서 숫자만 추출해서 QString으로 반환 makersweb 2017.01.10 3078
169 Qt Logging Rule, Qt 프레임워크 로그 출력 makersweb 2017.01.13 3709
168 타임스탬프( timestamp) 유닉스 시간 makersweb 2017.10.19 1625
167 QPA 플러그인과 EGLFS file makersweb 2017.11.21 3935
166 QML에서 undefined를 확인하는 방법 makersweb 2017.11.29 1487
165 임의의 메모리 영역(QImage)에 QPainter를 이용하여 그리기 file makersweb 2017.12.19 3453
164 QPA 플러그인과 HTML5 Backend file makersweb 2017.12.27 809
163 Qt 3D Studio 시작하기 file makersweb 2018.01.11 3829
162 Qt 어플리에이션 전역에 폰트 설정 makersweb 2018.01.24 5616
161 다국어 지원 어플리케이션 개발 file makersweb 2018.01.27 2981
160 Windows환경에서 mingw로 Qt 5.10 정적(static)빌드 file makersweb 2018.02.01 5706