Здравствуйте, коллеги.
Qt 5 достаточно нов для того чтобы там не оказалось чего-то очень нужного. Вот так же выяснилось что там нет плагина для AdMob и других сервисов монетизации.
После того как вы разработали или портировали свое приложение на Qt под android, часто может встать вопрос монетизации. Кратко упомянуто о решении это проблемы в моем предыдущем посте. Здесь описано более подробно как встроить AdMob в Qt приложение под Android.
V-play платный фреймворк с плагином для встраивания разных сервисов в Qt приложения, в том числе и рекламные. Для кого-то это будет вполне приемлимое решение вопроса монетизации.
Много ссылок в сети ведут именно на этот плагин, но он уже устарел.
Помогли: документация для разработчика под Android, исходный код Qt и Necessities, а также немногочисленные стать, «отца» Qt под Android, Богдана Ватры.
Вначале надо добавить Google Play Service (на данный момент именно там находится a AdMob java api) для совместной сборки с вашим проектом на Qt.
Добавляем файл project.properties в папку где хранятся android файлы Qt проекта. В нем прописываем ссылку на библиотеку Google Play Service:
android.library.reference.1=./relative/path/to/google-play-services_lib
Важно указать именно относительный путь к директории библиотеки, с абсолютным путем будут ошибки при сборке. И естественно этот путь должен быть относительно build директори проекта, а не директории с исходным кодом.
Это шаг может не понадобится, но если появляются ошибки при сборке попробуйте его.
В директории библиотеки ( /path_to_android_sdk/extras/google/google_play_services/libproject/google-play-services_lib/) нужно запустить следующие команды:
Далее редактируем AndroidManifest.xml
добавляем права для загрузки рекламы:
добавляем версию Google Play Service в секцию application:
добваляем activity в секцию application:
После того как Google Play Service подключен к проекту, следует реализовать главное Activity, которое должно наследоваться от QtActivity, в нем уже надо добавить AdView. Вот как примерно это может выглядеть в коде:
Здесь мы получаем корневое View из нашего Activity.
В Qt проекте это будет QtLayout, который наследуется от ViewGroup, что нам и позволяет включить в него AdView.
Далее надо добавить в ViewGroup AdView в тот момент когда реклама будет загружена. Если это сделать в функции onCreate то рекламный блог не отобразится пока не сменится ориентация экрана, либо пока приложение не будет свернуто и развернуто. Похоже это проблема в Qt java классах QtLayout.java и/или QtSurface.java.
Вот что получилось в итоге:
github.com/AlexMarlo/AdMob-Qt5.2-Example
Полезные ссылки:
qt-project.org/doc/qt-5/qtandroidextras-notification-example.html
gitorious.org/qadmob
blog.qt.digia.com/blog/2013/12/12/implementing-in-app-purchase-on-android
developer.android.com/tools/projects/index.html
developer.android.com/tools/projects/projects-cmdline.html
PS:
Следующим шагом должно быть создание полноценного кросплатформенного плагина для интеграции AdMob и других сервисов монетизации в Qt. Не уверен что смогу что-то такое сделать, но надеюсь что данная статья поможет кому-то справиться с этой задачей.
Qt 5 достаточно нов для того чтобы там не оказалось чего-то очень нужного. Вот так же выяснилось что там нет плагина для AdMob и других сервисов монетизации.
После того как вы разработали или портировали свое приложение на Qt под android, часто может встать вопрос монетизации. Кратко упомянуто о решении это проблемы в моем предыдущем посте. Здесь описано более подробно как встроить AdMob в Qt приложение под Android.
Поиск готового решения
V-play AdMob plugin
V-play платный фреймворк с плагином для встраивания разных сервисов в Qt приложения, в том числе и рекламные. Для кого-то это будет вполне приемлимое решение вопроса монетизации.
qadmob
Много ссылок в сети ведут именно на этот плагин, но он уже устарел.
Что помогло решить проблему
Помогли: документация для разработчика под Android, исходный код Qt и Necessities, а также немногочисленные стать, «отца» Qt под Android, Богдана Ватры.
Инструкция
Google Play Service
Вначале надо добавить Google Play Service (на данный момент именно там находится a AdMob java api) для совместной сборки с вашим проектом на Qt.
Шаг 1
Добавляем файл project.properties в папку где хранятся android файлы Qt проекта. В нем прописываем ссылку на библиотеку Google Play Service:
android.library.reference.1=./relative/path/to/google-play-services_lib
Важно указать именно относительный путь к директории библиотеки, с абсолютным путем будут ошибки при сборке. И естественно этот путь должен быть относительно build директори проекта, а не директории с исходным кодом.
Шаг 2
Это шаг может не понадобится, но если появляются ошибки при сборке попробуйте его.
В директории библиотеки ( /path_to_android_sdk/extras/google/google_play_services/libproject/google-play-services_lib/) нужно запустить следующие команды:
android update lib-project --path .
ant clean
ant release
Шаг 3
Далее редактируем AndroidManifest.xml
добавляем права для загрузки рекламы:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
добавляем версию Google Play Service в секцию application:
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
добваляем activity в секцию application:
<activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:name="com.google.android.gms.ads.AdActivity"/>
Добавлям AdMob баннер
После того как Google Play Service подключен к проекту, следует реализовать главное Activity, которое должно наследоваться от QtActivity, в нем уже надо добавить AdView. Вот как примерно это может выглядеть в коде:
Много кода
package org.qtproject.example.admobqt;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.AdListener;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
public class AdMobQtActivity extends org.qtproject.qt5.android.bindings.QtActivity
{
private static ViewGroup viewGroup;
private AdView mAdView;
private boolean adAdded = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAdView = new AdView(this);
mAdView.setAdUnitId("YOUR_ADMOB_ID_HERE");
mAdView.setAdSize(AdSize.BANNER);
View view = getWindow().getDecorView().getRootView();
if (view instanceof ViewGroup) {
viewGroup = (ViewGroup) view;
ViewGroup.LayoutParams ad_layout_params = new ViewGroup.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, 150);
mAdView.setLayoutParams(ad_layout_params);
mAdView.setAdListener( new AdListener() {
public void onAdLoaded(){
if( adAdded)
return;
adAdded = true;
viewGroup.addView( mAdView);
}
});
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.addTestDevice("INSERT_YOUR_HASHED_DEVICE_ID_HERE")
.build();
mAdView.loadAd( adRequest);
}
}
@Override
public void onPause() {
mAdView.pause();
super.onPause();
}
@Override
public void onResume() {
super.onResume();
mAdView.resume();
}
@Override
public void onDestroy() {
mAdView.destroy();
super.onDestroy();
}
}
Здесь мы получаем корневое View из нашего Activity.
View view = getWindow().getDecorView().getRootView();
В Qt проекте это будет QtLayout, который наследуется от ViewGroup, что нам и позволяет включить в него AdView.
Далее надо добавить в ViewGroup AdView в тот момент когда реклама будет загружена. Если это сделать в функции onCreate то рекламный блог не отобразится пока не сменится ориентация экрана, либо пока приложение не будет свернуто и развернуто. Похоже это проблема в Qt java классах QtLayout.java и/или QtSurface.java.
mAdView.setAdListener( new AdListener() {
public void onAdLoaded(){
if( adAdded)
return;
adAdded = true;
viewGroup.addView( mAdView);
}
});
Вот что получилось в итоге:
github.com/AlexMarlo/AdMob-Qt5.2-Example
Полезные ссылки:
qt-project.org/doc/qt-5/qtandroidextras-notification-example.html
gitorious.org/qadmob
blog.qt.digia.com/blog/2013/12/12/implementing-in-app-purchase-on-android
developer.android.com/tools/projects/index.html
developer.android.com/tools/projects/projects-cmdline.html
PS:
Следующим шагом должно быть создание полноценного кросплатформенного плагина для интеграции AdMob и других сервисов монетизации в Qt. Не уверен что смогу что-то такое сделать, но надеюсь что данная статья поможет кому-то справиться с этой задачей.