マーマレードの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

Source: https://habr.com/ru/post/J124077/


All Articles