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