한국어
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 86173
23 QPA 플러그인과 EGLFS file makersweb 2017.11.21 3938
22 QPA 플러그인과 HTML5 Backend file makersweb 2017.12.27 809
21 Windows에서 라즈베리파이3용 Qt5.10.0 크로스컴파일 [20] file makersweb 2018.02.23 13043
20 안드로이드 Qt 프로그래밍 file makersweb 2018.11.30 8852
19 싱글터치 스크린 및 임베디드 리눅스 기반에서 Qt 터치입력 makersweb 2018.12.24 1403
18 QtWayland와 ivi-compositor file makersweb 2018.12.27 2413
17 안드로이드 가상장치 사용 file makersweb 2019.01.13 1074
16 Qt Bluetooth를 이용한 시리얼(Serial) 통신 file makersweb 2019.02.17 3599
15 Qt5기반 독립 프로세스(out-of-process)로 동작하는 가상키보드(virtual keyboard) file makersweb 2019.02.24 2632
14 가상키보드(Qt Virtual Keyboard)를 사용하는 방법 [32] file makersweb 2019.05.03 221817
13 MCU용 Qt에 대해서 makersweb 2019.08.22 1923
12 Qt for Embedded Linux 화면출력 makersweb 2019.10.17 1601
11 라즈베리파이3에서 Boot to Qt 실행해보기 makersweb 2019.11.13 1671
10 Qt for MCU 1.0 릴리즈 makersweb 2019.12.10 753
9 라즈베리파이4에 대한 Qt 5.14.1 크로스컴파일 [1] file makersweb 2020.02.12 4459
8 Qt로 작성된 안드로이드 APP에 Splash Screen을 추가 file makersweb 2020.03.10 885
7 Qt MQTT 에 대해서 file makersweb 2020.06.02 962
6 Qt MQTT의 pus/sub 튜토리얼 file makersweb 2021.02.06 1663
» Qt Android 앱에 AdMob 배너달기 file makersweb 2021.12.04 395
4 Qt Bluetooth Low Energy 개요 makersweb 2022.02.13 678