한국어
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 91481
40 Qt 응용프로그램에서 Lottie Animation사용 file makersweb 2021.05.30 1611
39 앱을 종료할 때 QML 바인딩 오류를 피하는 방법 makersweb 2021.08.08 1242
38 QML 에서 QR코드 생성 file makersweb 2021.08.20 1442
37 QML 코딩 규칙 makersweb 2021.09.05 4347
36 QML에서 Websocket 서버와 통신 file makersweb 2021.09.18 1567
35 Qt 응용프로그램에서 PDF 문서 렌더링 file makersweb 2021.09.23 1415
34 안드로이드용 Qt 6.2 makersweb 2021.10.02 1255
33 QML에서 앵커(anchors)로 위치 지정 file makersweb 2021.10.05 5145
32 Qt 6의 C++ 프로퍼티 바인딩 예제 makersweb 2021.11.01 1421
» Qt Android 앱에 AdMob 배너달기 file makersweb 2021.12.04 1001
30 Qt Bluetooth Low Energy 개요 makersweb 2022.02.13 1386
29 Binding 타입으로 객체 속성 간 묶기 makersweb 2022.03.04 1058
28 성능 고려 및 제안 사항 makersweb 2022.03.07 1148
27 VirtualKeyboard 스타일 커스터 마이징 makersweb 2022.03.13 1297
26 Qt로 작성된 iOS 앱에서 시리얼 통신 file makersweb 2022.04.30 1770
25 단일 인스턴스 Qt 응용 프로그램(Single-instance Application) makersweb 2022.06.23 1391
24 HTTPS URL을 연결할 때 SslHandshakeFailedError 오류 makersweb 2022.07.31 1036
23 Qt 6.4에 추가될 Qt Quick 3D Physics file makersweb 2022.08.07 1024
22 Qt 스마트 포인터 (QSharedPointer, QScopedPointer, QPointer) makersweb 2022.08.18 2031
21 clazy 로 13개의 시그널, 슬롯 오류 해결 makersweb 2022.08.23 1444