マーマレードのAdMob広告を接続します(Android OSの拡張機能)

クロスプラットフォームのゲームやアプリケーションを開発する場合、ほとんどの開発者は有料または無料(広告付き)でゲームのAndroidバージョンをリリースします。多くの場合、有料版とライト版の完全版は無料です。



Marmalade (以前のAirplay SDK)を使用してゲームを開発するとき、広告を導入することが必要になりました (この記事ではAdMobが例として使用されています)、そして賢明な情報、例、またはチュートリアルがどこにもないので、自分でそれを掘らなければなりませんでした。 その結果、すべてがそれほど難しくないことが判明しました。



必要なもの:

  1. Marmalade SDK 5.0以降(この記事ではバージョン5.0を使用)
  2. Android NDK r5(要件にインストールされたツールとNDK_ROOTシステム変数を使用)
  3. GoogleAdMobAdsSdk-4.1.0.jar


拡張機能を作成する



Marmaladeがインストールされているディレクトリ、拡張子(たとえば、c:\ Marmalade \ 5.0 \ extensions)を持つフォルダに移動し、新しいAdmobAds拡張の名前で独自のフォルダを作成します。 拡張機能は、他の拡張機能があるディレクトリに配置することをお勧めします。

ここで、次を含むテキストドキュメントAdmobAds.s4eを作成する必要があります。

 #include <s3eTypes.h>

機能:
 s3eResult InitAds(const char * pub_id)S3E_RESULT_ERROR run_on_os_thread
 s3eResult ShowAds()S3E_RESULT_ERROR run_on_os_thread
 s3eResult HideAds()S3E_RESULT_ERROR run_on_os_thread


つまり、拡張機能には3つのメソッドがあります。





ここで、Androidの拡張コードを生成する必要があります。そのためには、 AdmobAds.s4eを右クリックして、 Build Android Extensionを選択します その後、javaおよびcppのテンプレートソースコード、およびその他の補助ファイルがソースフォルダーに生成されます。



画像



コードが生成されたら、... \ AdmobAds \ source \ android \ AdmobAds.javaを開きます。これには、 AdmobAds.s4eで説明されているメソッドが含まれています

  / *
 AdmobAds拡張機能のJava実装。

ここにAndroid固有の機能を追加します。

これらの関数は、ネイティブコードからJNIを介して呼び出されます。
 * /
 / *
  *注:このファイルは元々拡張機能ビルダーによって作成されたものですが、
  * --forceが指定されていない限り上書きされ、変更されることを意図しています。
  * /
 import com.ideaworks3d.marmalade.LoaderAPI;

クラスAdmobAds
 {
	
     public int InitAds(最終文字列pub_id)
     {
         0を返します。
     }

     public int ShowAds()
     {
         0を返します。
     }
    
     public int HideAds()
     {
         0を返します。
     }
 } 




重要:メソッドはUIスレッドで実行されません。同じToastを表示するには、runOnUiThreadを使用して起動を追加する必要があります。



 import com.ideaworks3d.marmalade.LoaderActivity;    
 import android.widget.Toast;

     ...    

     public int InitAds(最終文字列pub_id)
     {
    	 LoaderActivity.m_Activity.runOnUiThread(新しいRunnable(){
			 @Override
			 public void run(){
				 Toast.makeText(LoaderActivity.m_Activity、pub_id、Toast.LENGTH_LONG).show();
			 }
		 });
         0を返します。
     } 


LoaderActivity.m_Activity-アプリケーションのメインアクティビティ。必要に応じて継承できます。



それがどのように動作するかを確認しましょう、ダブルクリックして起動します

  1. AdmobAds_android.mkb
  2. AdmobAds_android_java.mkb


すべてが正しく行われていれば、ビルドは失敗しません。



拡張機能をプロジェクトに接続するには、いくつかの手順を実行する必要があります。



 サブプロジェクト
 {
	アドモバッド
 } 




  #include "AdmobAds.h"

 int main()
 {
	 if(AdmobAdsAvailable()){
		 InitAds( "a14bd815 ...");
	 }


AdmobAdsAvailable()メソッドは、拡張機能の作成時に自動的に生成され、このプラットフォームで拡張機能が使用可能な場合はtrueを返します(つまり、AndroidおよびiOSの場合はtrue、winなどはfalseを返します)。



GCC ARM(リリース)をコンパイルした後、デプロイメントツールを起動し、ビルドディレクトリのdeploy_config.pyディレクトリからファイルを選択し、Androidプラットフォームのリストから選択して、[すべて展開]をクリックします。 その後、選択したプラットフォームのアプリケーションのエクスポートを開始します。 ビルドが成功した場合は、apkファイルを携帯電話にダウンロードします(!)



私たちはトーストを見ました-すべては順調です



AdmobAds拡張機能に広告を追加する



AdmobAds.java拡張機能の前述のソースコードを開いて編集し、そこに広告を追加します。

 import android.view.ViewGroup.LayoutParams;
 import android.view.View;
 import android.widget.Toast;

 import com.google.ads.Ad;
 import com.google.ads.AdRequest;
 import com.google.ads.AdRequest.ErrorCode;
 import com.google.ads.AdSize;
 import com.google.ads.AdView;
 import com.ideaworks3d.marmalade.LoaderAPI;
 import com.ideaworks3d.marmalade.LoaderActivity;

クラスAdmobAds
 {
     private static final int ADVIEW_NOT_INITIALIZED = 1;
    プライベートAdView adView;
	
     public int InitAds(最終文字列pub_id)
     {
    	 LoaderActivity.m_Activity.runOnUiThread(新しいRunnable(){
			 @Override
			 public void run(){
				 Toast.makeText(LoaderActivity.m_Activity、pub_id、Toast.LENGTH_LONG).show();
				
				 adView =新しいAdView(LoaderActivity.m_Activity、AdSize.BANNER、pub_id);
				 adView.loadAd(新しいAdRequest());
				 LoaderActivity.m_Activity.addContentView(adView、新しいLayoutParams(LayoutParams.WRAP_CONTENT、LayoutParams.WRAP_CONTENT));
			 }
		 });
         0を返します。
     }
     public int ShowAds()
     {
	 if(adView!= null){
		 LoaderActivity.m_Activity.runOnUiThread(新しいRunnable(){
			 @Override
			 public void run(){
				 adView.setVisibility(View.VISIBLE);
			 }});
	 } else { 
		 return ADVIEW_NOT_INITIALIZED; 
	 }

         0を返します。
     }
     public int HideAds()
     {
	 if(adView!= null){
		 LoaderActivity.m_Activity.runOnUiThread(新しいRunnable(){
			 @Override
			 public void run(){
				 adView.setVisibility(View.INVISIBLE);
			 }});
	 } else { 
		 return ADVIEW_NOT_INITIALIZED; 
	 }
         0を返します。
     }
 }


ご覧のとおり、AdMob wikiの広告実装コードの標準的な例である、異常なものはありません



打ち上げ



  #!/ usr / bin / env mkb
 #AndroidのAdmobAds拡張機能のJava部分のBuilder mkbファイル
プラットフォームjava

ファイル
 {
     (ソース/アンドロイド)
     AdmobAds.java
 }

 librarypath "$ MARMALADE_ROOT / s3e / deploy / plugins / android / android.jar"
 librarypath "$ MARMALADE_ROOT / s3e / loader / android / s3e_release.jar"
 librarypath "c:/Marmalade/5.0/examples/HelloWorld_java/GoogleAdMobAdsSdk-4.1.0.jar"

オプションoutput-name = lib / android / AdmobAds.jar






ここで、s3eHelloWorld.mkbを編集してそこに追加する必要があります

展開
 {
	 android-manifest = AndroidManifest.xml
	 android-external-jars = GoogleAdMobAdsSdk-4.1.0.jar
 }




AndroidManifest.xmlは、生成されたもの(.apkファイルの隣にIntermediate_filesディレクトリがあります)にコピーして追加できます。

     <アクティビティandroid:name = "com.google.ads.AdActivity"
               android:configChanges = "keyboard | keyboardHidden | orientation" />

 ...

     <uses-permission android:name = "android.permission.INTERNET" />
     <uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />




エクスポート手順を繰り返し、電話にダウンロードします。





なんらかの理由で、Androidエミュレーターでクラッシュします。明らかにマーマレードとは必ずしも友好的ではありませんが、この例はテストされ、Nexus S、huawei u8110、huawei ideos u8150、Samsung i5500電話で動作します



基礎は、次の情報源から情報を取得した

Google AdMob Ads Androidの基礎

EDKチュートリアル

マーマレードのドキュメント



Marmaladeからの依頼により、Gitにソースコードを投稿しました(HelloWorldの注意が少し変更されました-広告の表示/非表示機能が追加されました)

https://github.com/marmalade/admob



All Articles