Михаиллл
МихаилллҚаң. 25, 2019, 6:51 Т.Ж.

Как добавить рекламу в приложения для Android

Android, Qt

Здравствуйте.
Как добавить рекламу в приложения для Android?

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

23
Evgenii Legotckoi
  • Қаң. 25, 2019, 7:01 Т.Ж.

Добрый день.

Вот этого лично я вам не подскажу. Можете поискать информацию на github, мне какие-то варианты попадались с реализацией для QML, также есть движок V-PLAY, которые базируется на Qt/QML, и в котором такая функция реализована из коробки. Если у них есть исходники в открытом доступе (по идее должны быть, поскольку Qt имеет базовую лицензицю LGPL), то можете покопаться в их исходниках.

    Михаиллл
    • Қаң. 29, 2019, 7:30 Т.Ж.

    Существует библиотека QtAdMob .
    Вот тут и тут описаны варианты ее использованияю
    Вот описан вариант на с++:

    #include "MainWindow.h"
    #include "ui_MainWindow.h"
    #include "QtAdMob/QtAdMobBanner.h"
    #include "QtAdMob/QtAdMobInterstitial.h"
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
        , m_Switch(false)
    {
        ui->setupUi(this);
    
        m_Banner = CreateQtAdMobBanner();
        m_Banner->Initialize();
        m_Banner->SetUnitId("ca-app-pub-7485900711629006/8288667458");
        m_Banner->SetSize(IQtAdMobBanner::Banner);
        m_Banner->AddTestDevice("514ED2E95AD8EECE454CC5565326160A");
        m_Banner->Show();
    
        m_Interstitial = CreateQtAdMobInterstitial();
        m_Interstitial->LoadWithUnitId("ca-app-pub-7485900711629006/9462519453");
        m_Interstitial->AddTestDevice("514ED2E95AD8EECE454CC5565326160A");
        m_Interstitial->Show();
    
        connect(ui->okButton, SIGNAL(clicked()), this, SLOT(OnButtonOkClicked()));
    }
    
    MainWindow::~MainWindow()
    {
        m_Banner->Shutdown();
        delete m_Banner;
        delete m_Interstitial;
        delete ui;
    }
    
    void MainWindow::resizeEvent(QResizeEvent *event)
    {
        UNUSED(event);
        QPoint position((width() - m_Banner->GetSizeInPixels().width()) * 0.5f, 50.0f);
        m_Banner->SetPosition(position);
    }
    
    void MainWindow::OnButtonOkClicked()
    {
        bool isShowed = m_Banner->IsShow();
        if (!isShowed)
        {
            m_Banner->Show();
            ui->okButton->setText("Hide Banner");
        }
        else
        {
            m_Banner->Hide();
            ui->okButton->setText("Show Banner");
        }
    }
    

    я подключил:

    #include "QtAdMob/QtAdMobBanner.h"
    #include "QtAdMob/QtAdMobInterstitial.h"
    

    и пытаюсь создать банер

    IQtAdMobBanner* banner = CreateQtAdMobBanner();
    

    и уже тут появляются ошибки:
    ошибка: undefined reference to `QtAdMobBannerDummy::QtAdMobBannerDummy()'
    Хотя если делать так, то создается

    IQtAdMobBanner* banner;
    

    но CreateQtAdMobBanner() приминить не получается.
    Помогите пожалуйста разобраться.

      Evgenii Legotckoi
      • Қаң. 29, 2019, 7:37 Т.Ж.

      IQtAdMobBanner* banner;

      Эта штука просто говорит, что у вас есть указатель для объекта класса IQtAdMobBanner. Но это ничего не создаёт. Компилируется потом, что он скорее всего в подключённом заголовочнике есть.

      Наверняка, вы не правильно библиотеку подключили. Там в репозитории есть пример подключения на виджетах. И вот там есть пример pro файла. Вы с ним сверялись?

      #-------------------------------------------------
      #
      # Project created by QtCreator 2015-06-10T23:28:49
      #
      #-------------------------------------------------
      
      QT       += core gui
      
      greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
      
      TARGET = QtAdMob
      VERSION = 0.0.1
      TEMPLATE = app
      
      ANDROID_PACKAGE_SOURCE_DIR = $$PWD/platform/android
      
      SOURCES += \
          main.cpp \
          MainWindow.cpp \
      
      HEADERS  += \
          MainWindow.h \
      
      FORMS    += \
          MainWindow.ui
      
      include(QtAdMob/QtAdMob.pri)
      
      android:
      {
          android:DISTFILES += \
                  $$ANDROID_PACKAGE_SOURCE_DIR/AndroidManifest.xml \
                  $$ANDROID_PACKAGE_SOURCE_DIR/build.gradle \
                  $$ANDROID_PACKAGE_SOURCE_DIR/src/org/dreamdev/QtAdMob/QtAdMobActivity.java
      }
      
      ios:
      {
          IOS_PACKAGE_SOURCE_DIR = $$PWD/platform/ios
          ios:QMAKE_INFO_PLIST = $$IOS_PACKAGE_SOURCE_DIR/Info.plist
          ios:QMAKE_IOS_DEPLOYMENT_TARGET = 7.0
      }
      
        Михаиллл
        • Қаң. 29, 2019, 8:29 Т.Ж.

        Спасибо! Помогло.

          Михаиллл
          • Қаң. 29, 2019, 11:30 Т.Ж.

          Добавил в файле .срр в вункцию MainWindow::MainWindow(QWidget *parent) :

          /QtAdMode
              myBanner = CreateQtAdMobBanner();
              myBanner->setUnitId("ca-app-pub-7485900711629006/8288667458");
              myBanner->setSize(IQtAdMobBanner::Banner);
              myBanner->addTestDevice("514ED2E95AD8EECE454CC5565326160A");
              myBanner->setVisible(true);
              //myBanner->Show();
          
              myInterstitial = CreateQtAdMobInterstitial();
              myInterstitial->addTestDevice("514ED2E95AD8EECE454CC5565326160A");
          
              myInterstitial->setVisible(true);
              myInterstitial->setUnitId("ca-app-pub-7485900711629006/9462519453");
          
          
              QPoint position((width() - myBanner->sizeInPixels().width()) * 0.5f, 0.0f);
              myBanner->setPosition(position);
          

          все компилируется, но реклама не появляется.
          Также к банеру нельзя применить метод Show().
          Пожалуйста, помогите разобраться с этой рекламой.

            Evgenii Legotckoi
            • Қаң. 30, 2019, 2:59 Т.Ж.

            А вы откуда show взяли? я не нашёл намёка в актуальном репозитории.

            Насчёт самой рекламы. Почитайте информацию в AdMob, возможно она просто сразу не показывается или не показывается по какой-то причине.
            Например, в Adsense до появления первой рекламы может полдня пройти.

              Михаиллл
              • Қаң. 30, 2019, 8:44 Т.Ж.

              Из этого примера:

              #include "MainWindow.h"
              #include "ui_MainWindow.h"
              #include "QtAdMob/QtAdMobBanner.h"
              #include "QtAdMob/QtAdMobInterstitial.h"
              
              MainWindow::MainWindow(QWidget *parent)
                  : QMainWindow(parent)
                  , ui(new Ui::MainWindow)
                  , m_Switch(false)
              {
                  ui->setupUi(this);
              
                  m_Banner = CreateQtAdMobBanner();
                  m_Banner->Initialize();
                  m_Banner->SetUnitId("ca-app-pub-7485900711629006/8288667458");
                  m_Banner->SetSize(IQtAdMobBanner::Banner);
                  m_Banner->AddTestDevice("514ED2E95AD8EECE454CC5565326160A");
                  m_Banner->Show();
              
                  m_Interstitial = CreateQtAdMobInterstitial();
                  m_Interstitial->LoadWithUnitId("ca-app-pub-7485900711629006/9462519453");
                  m_Interstitial->AddTestDevice("514ED2E95AD8EECE454CC5565326160A");
                  m_Interstitial->Show();
              
                  connect(ui->okButton, SIGNAL(clicked()), this, SLOT(OnButtonOkClicked()));
              }
              

              С документацией беда, там только 1 страничка текста:
              Изменил xml файл по образцу, после этого мое приложение перестало компилироваться компилятором android.
              Также этим компилятором изначально не компилировалось приложения из примера.
              Подскажите пожалуйста, в чем может быть беда?
              Мой xml файл выглядит так:

              <?xml version="1.0"?>
              <manifest package="org.qtproject.example" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
                  <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="-- %%INSERT_APP_NAME%% --" android:icon="@drawable/icon">
              
              <!--This meta-data tag is required to use Google Play Services.-->
                      <meta-data android:name="com.google.android.gms.version"
                                 android:value="@integer/google_play_services_version"/>
              
              <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density"
              android:name="org.dreamdev.QtAdMob.QtAdMobActivity"
              android:label="-- %%INSERT_APP_NAME%% --"
              android:screenOrientation="unspecified"
              android:launchMode="singleTop">
                          <intent-filter>
                              <action android:name="android.intent.action.MAIN"/>
                              <category android:name="android.intent.category.LAUNCHER"/>
                          </intent-filter>
              
                          <!-- Application arguments -->
                          <!-- meta-data android:name="android.app.arguments" android:value="arg1 arg2 arg3"/ -->
                          <!-- Application arguments -->
              
                          <meta-data android:name="android.app.lib_name" android:value="-- %%INSERT_APP_LIB_NAME%% --"/>
                          <meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
                          <meta-data android:name="android.app.repository" android:value="default"/>
                          <meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
                          <meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
                          <!-- Deploy Qt libs as part of package -->
                          <meta-data android:name="android.app.bundle_local_qt_libs" android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --"/>
                          <meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
                          <meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/>
                          <!-- Run with local libs -->
                          <meta-data android:name="android.app.use_local_qt_libs" android:value="-- %%USE_LOCAL_QT_LIBS%% --"/>
                          <meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
                          <meta-data android:name="android.app.load_local_libs" android:value="-- %%INSERT_LOCAL_LIBS%% --"/>
                          <meta-data android:name="android.app.load_local_jars" android:value="-- %%INSERT_LOCAL_JARS%% --"/>
                          <meta-data android:name="android.app.static_init_classes" android:value="-- %%INSERT_INIT_CLASSES%% --"/>
                          <!-- Used to specify custom system library path to run with local system libs -->
                          <!-- <meta-data android:name="android.app.system_libs_prefix" android:value="/system/lib/"/> -->
                          <!--  Messages maps -->
                          <meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
                          <meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
                          <meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
                          <!--  Messages maps -->
              
                          <!-- Splash screen -->
                          <!-- meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/logo"/ -->
                          <!-- meta-data android:name="android.app.splash_screen_sticky" android:value="true"/ -->
                          <!-- Splash screen -->
              
                          <!-- Background running -->
                          <!-- Warning: changing this value to true may cause unexpected crashes if the
                                        application still try to draw after
                                        "applicationStateChanged(Qt::ApplicationSuspended)"
                                        signal is sent! -->
                          <meta-data android:name="android.app.background_running" android:value="false"/>
                          <!-- Background running -->
              
                          <!-- auto screen scale factor -->
                          <meta-data android:name="android.app.auto_screen_scale_factor" android:value="false"/>
                          <!-- auto screen scale factor -->
              
                          <!-- extract android style -->
                          <!-- available android:values :
                              * default - In most cases this will be the same as "full", but it can also be something else if needed, e.g., for compatibility reasons
                              * full - useful QWidget & Quick Controls 1 apps
                              * minimal - useful for Quick Controls 2 apps, it is much faster than "full"
                              * none - useful for apps that don't use any of the above Qt modules
                              -->
                          <meta-data android:name="android.app.extract_android_style" android:value="default"/>
                          <!-- extract android style -->
                  </activity>
              
                  <!-- For adding service(s) please check: https://wiki.qt.io/AndroidServices -->
              
                  <!--Include the AdActivity configChanges and theme. -->
                  <activity android:name="com.google.android.gms.ads.AdActivity"
                  android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
                  android:theme="@android:style/Theme.Translucent">
                      <meta-data android:name="android.app.lib_name" android:value="QtAdMob"/>
                  </activity>
              
                  </application>
              
                  <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="28"/>
                  <supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
              
                  <!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application.
                       Remove the comment if you do not require these default permissions. -->
                  <!-- %%INSERT_PERMISSIONS -->
              
                  <!-- The following comment will be replaced upon deployment with default features based on the dependencies of the application.
                       Remove the comment if you do not require these default features. -->
                  <!-- %%INSERT_FEATURES -->
              
              <uses-permission android:name="android.permission.INTERNET"/>
              <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
              <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
              
              </manifest>
              
              
                Evgenii Legotckoi
                • Ақп. 1, 2019, 5:57 Т.Ж.

                А ошибки какие выдаёт при компиляции?

                  Михаиллл
                  • Ақп. 1, 2019, 6:52 Т.Ж.

                  Кпассны в консоли сборки написано:
                  FAILURE: Build failed with an exception.

                  • Where:
                    Build file 'D:\QTProject\QtAdMobApp-master\build-QtAdMobApp-Android_armeabi_v7a_Clang_Qt_5_12_0_for_Android_ARMv7-Debug\android-build\build.gradle' line: 17

                  • What went wrong:
                    A problem occurred evaluating root project 'android-build'.

                    Failed to apply plugin [id 'com.android.application']
                    Gradle version 2.2 is required. Current version is 4.6. If using the gradle wrapper, try editing the distributionUrl in D:\QTProject\QtAdMobApp-master\build-QtAdMobApp-Android_armeabi_v7a_Clang_Qt_5_12_0_for_Android_ARMv7-Debug\android-build\gradle\wrapper\gradle-wrapper.properties to gradle-2.2-all.zip

                  • Try:
                    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

                  • Get more help at https://help.gradle.org

                  BUILD FAILED in 30s
                  -- Skipping D:/QT/5.12.0/android_armv7/plugins/iconengines/libqsvgicon.so. It has unmet dependencies: lib/libQt5Svg.so.
                  -- Skipping D:/QT/5.12.0/android_armv7/plugins/imageformats/libqsvg.so. It has unmet dependencies: lib/libQt5Svg.so.
                  Building the android package failed!
                  -- For more information, run this command with --verbose.
                  14:50:11: Процесс «D:\QT\5.12.0\android_armv7\bin\androiddeployqt.exe» завершился с кодом 14.
                  Ошибка при сборке/установке проекта QtAdMobApp (комплект: Android для armeabi-v7a (Clang Qt 5.12.0 for Android ARMv7))
                  Во время выполнения этапа «Сборка Android APK»
                  14:50:11: Прошло времени: 00:55.

                    Evgenii Legotckoi
                    • Ақп. 1, 2019, 6:56 Т.Ж.

                    Требует очень старую систему сборки gradle. (Сам по себе тот пример очень старый, вообще сдаётся мне что библиотека заброшена) Вы в своём проекте создавали свой Android Manifest, а потом исправляли, как там в примере было?

                      Михаиллл
                      • Ақп. 1, 2019, 7:17 Т.Ж.

                      Да, и после этого тоже не компилировалось

                        Михаиллл
                        • Ақп. 1, 2019, 7:18 Т.Ж.

                        Библиотека только первой версии с отсуствием последующих появившихся возможностей рекламы

                          Evgenii Legotckoi
                          • Ақп. 1, 2019, 7:23 Т.Ж.

                          не знаю тогда. Возможно имеет смысл форкнуть и переписать все нерабочие моменты, но это крупный объём работы. Пошагово придётся смотреть, что и где не работает и внедрять. В общем не самая радужная перспектива. Либо попробовать контактировать с автором библиотеки и уточнить, использует ли он её в реальных проектах сейчас или выбрал какую-то иную альтернативу.

                            Михаиллл
                            • Ақп. 1, 2019, 8 Т.Ж.

                            Из альтернатив только V-Play. Но там похоже все на QML, а мое приложение все на с++.
                            Скажите пожалуйста, QML это ведь альтеонатива дизайнеру и коду C++?

                              Evgenii Legotckoi
                              • Ақп. 1, 2019, 8:05 Т.Ж.
                              • (өңделген)

                              Нет, QML - это не альтернатива, а дополнение для замены фронтенда приложения. Критичные секции и бизнес-логику я всё равно писал на C++, также как и кастомные QML типы. Для меня это лишь удобная морда приложения.

                              Тоже самое касается и V-Play, ничто не мешает использовать его вместе со своими C++ классами. Я его пару лет назад пробовал, но не имел актуальных задач для внедрения V-Play в реальные проекты, поэтому особо не знаю, как там эта кухня варится на данный момент, но не думаю, что использование своего C++ бэкенда является такой проблемой там.

                                Михаиллл
                                • Ақп. 1, 2019, 8:46 Т.Ж.

                                А есть ли удобный QML редактор, на подобие дизайнера c++? Или там каждую люнию вручную прописывать?

                                  Evgenii Legotckoi
                                  • Ақп. 1, 2019, 8:49 Т.Ж.

                                  Создайте проект QML с ui формой и сами всё увидите. А так ещё в состоянии бета есть Qt Designer Studio, там даже какой-то функционал импорта из фотошоп вроде бы есть.

                                    Михаиллл
                                    • Ақп. 1, 2019, 9:33 Т.Ж.

                                    А как его создавать? Qt Quick - пустое?

                                      Михаиллл
                                      • Ақп. 1, 2019, 9:45 Т.Ж.

                                      Не нашел в моем Qt такой возможности:(

                                        Evgenii Legotckoi
                                        • Ақп. 1, 2019, 9:47 Т.Ж.

                                        Создайте проект Qt Quick - Swipe. Там будет создан проект с файлами ui.qml

                                          Михаиллл
                                          • Ақп. 1, 2019, 10:55 Т.Ж.

                                          Спасибо, посмотрел.
                                          А можно ли код из .ui файла как то перенести в ui.qml?

                                            Evgenii Legotckoi
                                            • Ақп. 1, 2019, 11:03 Т.Ж.
                                            • Жауап шешім ретінде белгіленді.

                                            Понятия не имею. Но также сомневаюсь, что кто-то делал подобные конверторы. Вручную переписывать придётся.

                                            Наборы элементов очень сильно разнятся у классических виджетов и qml виджетов, тем более, что в QML присутствует то, чего нет в виджетах, например, Navigation Drawer и всё остальное, что относится к Material Design. По-хорошему, Вам следовало бы ознакомиться с текущим положением вещей, прежде чем писать под Андроид на виджетах.

                                              Михаиллл
                                              • Ақп. 1, 2019, 1:03 Т.Қ.

                                              спасибо

                                                Пікірлер

                                                Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                                                Кіріңіз немесе Тіркеліңіз
                                                AD

                                                C++ - Тест 004. Указатели, Массивы и Циклы

                                                • Нәтиже:50ұпай,
                                                • Бағалау ұпайлары-4
                                                m
                                                • molni99
                                                • Қаз. 26, 2024, 1:37 Т.Ж.

                                                C++ - Тест 004. Указатели, Массивы и Циклы

                                                • Нәтиже:80ұпай,
                                                • Бағалау ұпайлары4
                                                m
                                                • molni99
                                                • Қаз. 26, 2024, 1:29 Т.Ж.

                                                C++ - Тест 004. Указатели, Массивы и Циклы

                                                • Нәтиже:20ұпай,
                                                • Бағалау ұпайлары-10
                                                Соңғы пікірлер
                                                ИМ
                                                Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
                                                Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                                                Evgenii Legotckoi
                                                Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
                                                Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                                                A
                                                ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
                                                Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                                                ИМ
                                                Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
                                                Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                                                d
                                                dblas5Шілде 5, 2024, 11:02 Т.Ж.
                                                QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                                                Енді форумда талқылаңыз
                                                m
                                                moogoҚар. 22, 2024, 7:17 Т.Ж.
                                                Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
                                                Evgenii Legotckoi
                                                Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                                                добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                                                t
                                                tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
                                                google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                                                NSProject
                                                NSProjectМаусым 4, 2022, 3:49 Т.Ж.
                                                Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

                                                Бізді әлеуметтік желілерде бақылаңыз