AdCtl:QMLを使用したAdMob、Analytics、StartADの接着

こんにちは



要するに。 少し前まで、クロスプラットフォームライブラリを実装することでAdMobとQtを横断するハブに関する記事がありまし 。 ライブラリをQMLアプリケーションと統合することができませんでした。 最近、私の小さな新しいQt QuickアプリケーションにAdMobを組み込むことにしたので、この問題に遭遇し、小さなラッパーを実装しました。 しかし、広告を埋め込むことにしたので、分析も必要でした。



ぶらぶらして、GAnalyticsを埋め込むための適切なライブラリを見つけました。 アプリケーションを公開しました-前進する方法を探し始めました。 これは長い間押しつぶされたビジネスであり、インディー開発者が良い投資なしで前進することは非常に難しいだろうと思いました。



しかし、突然、興味深いクロスプロモーションサービスStartAd.mobiに出会いました。 その本質は、最初の月に無料でネットワークがあなたがもたらすよりも何倍も多くのトラフィックを提供することです。 おもしろくなり、統計をチェックして運を試すために、このサービスをプロジェクトに導入しました。



ご理解のとおり、これらの各ソリューションの統合は小さな地獄に変わりました。これは、3つの外部依存関係がプロジェクトに現れたためであり、管理方法が明確ではありません。



最後に、プロジェクトコードを見て、緊急にリファクタリングする必要があるフランケンシュタインが判明し始めたことに気付きました。 また、リファクタリングを行う場合は、サブプロジェクトで広告プロバイダーや分析とやり取りするすべてのコードを選択し、それをオープンソースにし、プログラムインターフェイスを記述し、新しいQtプロジェクトにできるだけ簡単に実装できるようにします。



私が達成したかった主なことは、そのような機能を将来のプロジェクトに統合するためのジェスチャーをできるだけ少なくすることでした。



そこでAdCtlが生まれました。



カットの下で、ライブラリ実装の詳細について説明し、自分のプロジェクトでの実装の例を示します。



だから、私の短い説明に興味がありますか? いいね! 私たちが持っているものを見てみましょう。



ライブラリは、現在3つの外部サービスを単一の全体に統合するラッパーです。



StartAD以外はすべてAndroidで起動し、iOSで起動しているようです。 適切なデバイスを持っていないため。 通常のポートを確認できません。



ライブラリの意味は、これらのサービスの機能を単一のソフトウェアインターフェイスに結合することです。 ライブラリを操作するロジックは次のようになります。

  1. Google Playに投稿したばかりの新しいAndroidアプリケーションがあります。
  2. 私たちはアプリケーションを宣伝し、それから収益化したいと考えています。
  3. アプリケーションでのユーザーアクションに関する統計情報を受け取りたい。


これらの目的のために、次のことを行います。

  1. AdMobバナーが表示される画面を決定します。
  2. StartAD.mobiバナーが表示される画面を定義します。
  3. 1つと他のバナーを統合し、ユーザーが特定のアクションを実行したときにGAnalyticsに情報を送信するように構成します。


一般に、すべては可能な限りシンプルで論理的です。



この目標を達成するのは簡単です。 これが私たちがする必要があることです。 たとえば、QtプロジェクトでandroidディレクトリがPROJECT_ROOT / mobile / androidにあると仮定します。



1.新しいGitサブモジュールをプロジェクトに追加します。

cd $$PROJECT_ROOT/mobile git submodule add https://github.com/kafeg/adctl.git git submodule update --init --recursive
      
      





このコマンドは、ライブラリソースと依存関係をダウンロードします。



2.ライブラリの.priファイルをプロジェクトに接続します。

  #AdCtl: Google Analytics, AdMob, StartAD.mobi ANDROID_PACKAGE_SOURCE_DIR = $$PWD/mobile/android include(mobile/adctl/AdCtl.pri) android { OTHER_FILES += \ $$PWD/mobile/android/AndroidManifest.xml }
      
      





ここで、アプリケーションのAndroid部分のソースディレクトリを設定し、外部ライブラリを統合するために必要なすべてのコマンドが既に含まれている.priファイルを含めます。



3. habrahabr.ru/post/261425と同様に、AndroidManifext.xmlを構成します

「application」タグの後に、Google Play Servicesプロジェクトに接続する行を追加します。

 <!--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"/>
      
      





メインアクティビティのandroid:nameパラメータを「ru.forsk.AdCtl.AdCtlActivity」に変更します。 これにより、アクティビティの主要なクラスはまさに私たちのクラスになり、必要なすべての機能が実装されます。



主なアクティビティの後に、特に広告の表示用に別のアクティビティを追加します。

  <!--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" android:label=" "> <meta-data android:name="android.app.lib_name" android:value="darkstories"/> </activity>
      
      





最後に、終了タグの前にプロジェクトに必要な権限を追加します。

 <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"/>
      
      





できた! 合計で、3つの外部サービスを3つの簡単な手順で統合しました。

さて、必要な追加ファイルはすべて、qmakeを使用してmobile / androidディレクトリに自動的にコピーされます。



それらの使用方法は? QMLの例を示します。



1つのRectangleがあるmain.qmlファイルがあるとします。

 Rectangle { id: root anchors.fill: parent }
      
      





アプリケーションに広告を追加するには、次のことを行う必要があります。

1. main.cppで新しいQMLタイプを宣言します。

  #include <mobile/adctl/adctl.h> ... //AdCtl QApplication::setApplicationName("Darkstories"); QApplication::setApplicationVersion("1.1"); qmlRegisterType<AdCtl>("ru.forsk.adctl", 1, 0, "AdCtl");
      
      





2.新しいタイプの宣言をmain.qmlに追加します。

  AdCtl { id: adCtl //manage enabled components adMobBannerEnabled: true adMobIinterstitialEnabled: true startAdBannerEnabled: true gAnalyticsEnabled: true //set ids adMobId: "YOUR_ADMOB_UNIT_ID" startAdId: "YOUR_STARTADMOBI_ID" gAnalyticsId: "YOUR_GANALYTICS_TRACKING_ID" //Start positions for banners. adMobBannerPosition: Qt.point(0,-500) startAdBannerPosition: Qt.point(0,-500) //when StartAd.mobi baners is showed we can to reposition it onStartAdBannerShowed: { console.log("onStartAdBannerShowed"); startAdBannerPosition = Qt.point(0, (appWindow.height - adCtl.startAdBannerHeight * 1.3)) } //when AdMob baners is showed we can to reposition it onAdMobBannerShowed: { console.log("onAdMobBannerShowed"); adMobBannerPosition = Qt.point((appWindow.width - adCtl.adMobBannerWidth) * 0.5, (appWindow.height - adCtl.adMobBannerHeight * 1.5 - 200)) adCtl.showAdMobInterstitial(); } //When all variables are setted, we can to initialize our code Component.onCompleted: { adCtl.init(); adCtl.showAdMobInterstitial(); } }
      
      





3.ルート要素の説明を変更します。

 Rectangle { id: root anchors.fill: parent anchors.bottomMargin: adCtl.startAdBannerHeight Component.onCompleted: { adCtl.sendGaAppView("MainWindow"); } }
      
      





そして、すべてが機能します!



ここで何が起こっていますか? とても簡単です。



AdCtl型の新しい要素を宣言するとき、現在のアプリケーションで必要なサブモジュールのパラメーターを設定します。 ソース4モジュールから利用可能-AdMobバナー、AbMobInterstitial、StartAdバナー、Googleアナリティクス。



必要なモジュールの発表後、各外部サービスのIDを設定します。



最後に、画面の境界を超えるデフォルトの位置と、イベントに基づいたバナーの最終的な位置を設定します。 バナーがすべての情報を受信し、最終的にレンダリングされた瞬間に発生します。



同時に、この方法でアプリケーション要素のルート位置をシフトしています。 バナーがアプリケーションインターフェースと重ならないようにします。



それは基本的にそれです。 このライブラリを新しいプロジェクトに接続するのに必要な時間はわずか10分で、最後には3つの外部srvisiと完全に統合され、バナーを自由に操作できます。



上記の機能に加えて。 ライブラリにはいくつかのメソッドもあります。 いつでも引き出す​​ことができます。



バナーを管理する方法:

  void showAdMobBanner(); void hideAdMobBanner(); void showAdMobInterstitial(); void showStartAdBanner(); void hideStartAdBanner();
      
      





Googleアナリティクスの管理方法:

  void sendGaAppView(const QString &screenName = QString()); void sendGaEvent(const QString &category = QString(), const QString &action = QString(), const QString &label = QString(), const QVariant &value = QVariant()); void endGaSession();
      
      





説明されているすべてのメソッドは、次の構文を使用してQMLコードからアクセスできます。

 adCtl.sendGaEvent("EventCategory", "EventAction", "Event label", "Event value")
      
      





実際にはすべて。



将来の計画では、ライブラリの機能を拡張し、Google Play Servicesを介した承認の可能性を追加し、ゲームの結果をクラウドに保存し、実績とやり取りします。



コメントや提案を待っています。 このライブラリにより、他の広告サイトを簡単に接続できます。 また、StartADのコードのiOS依存部分を統合し、このプラットフォームでGAnalyticsおよびQtAdMobコードの機能を確認することについての支援を拒否しません。



PS:デモアプリケーションへのリンクはGitHubライブラリページにあります



All Articles