한국어
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 85892
23 가상키보드(Qt Virtual Keyboard)를 사용하는 방법 [32] file makersweb 2019.05.03 221076
22 Windows에서 라즈베리파이3용 Qt5.10.0 크로스컴파일 [20] file makersweb 2018.02.23 12951
21 안드로이드 Qt 프로그래밍 file makersweb 2018.11.30 8818
20 라즈베리파이4에 대한 Qt 5.14.1 크로스컴파일 [1] file makersweb 2020.02.12 4450
19 QPA 플러그인과 EGLFS file makersweb 2017.11.21 3927
18 Qt Bluetooth를 이용한 시리얼(Serial) 통신 file makersweb 2019.02.17 3564
17 Qt5기반 독립 프로세스(out-of-process)로 동작하는 가상키보드(virtual keyboard) file makersweb 2019.02.24 2628
16 QtWayland와 ivi-compositor file makersweb 2018.12.27 2403
15 MCU용 Qt에 대해서 makersweb 2019.08.22 1914
14 라즈베리파이3에서 Boot to Qt 실행해보기 makersweb 2019.11.13 1668
13 Qt MQTT의 pus/sub 튜토리얼 file makersweb 2021.02.06 1639
12 Qt for Embedded Linux 화면출력 makersweb 2019.10.17 1599
11 싱글터치 스크린 및 임베디드 리눅스 기반에서 Qt 터치입력 makersweb 2018.12.24 1399
10 안드로이드 가상장치 사용 file makersweb 2019.01.13 1074
9 Qt MQTT 에 대해서 file makersweb 2020.06.02 959
8 Qt로 작성된 안드로이드 APP에 Splash Screen을 추가 file makersweb 2020.03.10 883
7 Qt로 작성된 iOS 앱에서 시리얼 통신 file makersweb 2022.04.30 850
6 QPA 플러그인과 HTML5 Backend file makersweb 2017.12.27 808
5 Qt for MCU 1.0 릴리즈 makersweb 2019.12.10 751
4 Qt Bluetooth Low Energy 개요 makersweb 2022.02.13 661