Qt 5は非常に新しく、非常に必要なものはありません。 また、AdMobや他の収益化サービス用のプラグインがないことも判明しました。
Qtアプリケーションを開発またはAndroidに移植した後、収益化が問題になることがよくあります。 以前の投稿でこの問題の解決策について簡単に言及しました。 AdMobをAndroidのQtアプリケーションに統合する方法について詳しく説明します。
解決策を見つける
V-play AdMobプラグイン
V-playは、広告などのさまざまなサービスをQtアプリケーションに埋め込むためのプラグインを備えた有料フレームワークです。 一部の人にとって、これは収益化の問題に対する完全に受け入れられる解決策です。
qadmob
ネットワーク上の多くのリンクがこのプラグインにつながりますが、すでに古くなっています。
問題の解決に貢献したもの
支援:Android向けの開発者向けドキュメント、QtおよびNecessitiesのソースコード、そしていくつかは、Qt for Androidの「父」であるBogdan Vatraになりました。
取扱説明書
Google Playサービス
まず、Qtプロジェクトとの共同アセンブリのために、Google Play Serviceを追加する必要があります(現時点ではAdMob Java APIが存在する場所です)。
ステップ1
project.propertiesファイルを、プロジェクトのAndroid Qtファイルが保存されているフォルダーに追加します。 Google Play Serviceライブラリへのリンクをその中に書きます:
android.library.reference.1 =。/相対/パス/ to / google-play-services_lib
ライブラリディレクトリへの相対パスを正確に示すことが重要です。絶対パスでは、アセンブリ中にエラーが発生します。 そして当然、このパスは、ソースコードのあるディレクトリではなく、プロジェクトのビルドディレクトリからの相対パスである必要があります。
ステップ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のバージョンをアプリケーションセクションに追加します。
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
アプリケーションセクションにアクティビティを追加します。
<activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:name="com.google.android.gms.ads.AdActivity"/>
Admobバナー
Google Play開発者サービスをプロジェクトに接続したら、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 view = getWindow().getDecorView().getRootView();
Qtプロジェクトでは、これはViewGroupから継承されるQtLayoutになり、AdViewを含めることができます。
次に、広告が読み込まれた瞬間にAdViewをViewGroupに追加する必要があります。 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に統合するための完全なクロスプラットフォームプラグインを作成することです。 このようなことができるかどうかはわかりませんが、この記事が誰かがこのタスクに対処するのに役立つことを願っています。