ときどきプログラミング

プログラミングとかで遊んで面白かったことをシェアするブログ

ProcessingでAdMobの広告を入れる方法

広告アプリをつくるために、ProcessingでAdMobを表示させましょう。

参考サイト

http://forum.processing.org/one/topic/how-to-including-ads-to-android-project.html

事前準備

  • admobアカウントを作って、パブリッシャーIDを手に入れる。
  • Google Mobile Ads SDKを落としてくる

https://developers.google.com/mobile-ads-sdk/download?hl=ja#downloadandroid

にある、GoogleMobileAdsSdkAndroid.zipをクリック。

しかし、、GoogleAdMobAdsSdk-6.4.1.jarは色々不具合が出る。

(Android-16以上を要求してくるがProcessingはAndroid-10でコンパイルしようとする)

ネットのどっかから、GoogleAdMobAdsSdk-4.1.1.jarを手に入れて使うことにした。

  • 解凍して出来たjarファイルをProcessingのライブラリフォルダに追加する。

「GoogleAdMobAdsSdk-4.1.1.jar」を、「AdMob.jar」 って名前に変える。

  • 場所移動
# cd /Users/***/Documents/Processing/libraries

ここに、AdMobってディレクトリ作成。

さらにAdMobディレクトリの中に。「library」ってディレクトリ作成。

libraryディレクトリの中に、「AdMob.jar」を入れる。

こんな感じ

# ls /Users/***/Documents/Processing/libraries/AdMob/library/AdMob.jar
AdMob.jar

Processingに認識させるため、一度Processingを再起動。

すると、SketchメニューのImport Libraryに AdMobってメニューが増えるのでそれを選択。

pdeファイルの先頭に下記が自動生成される。一旦全部消す。

import com.google.ads.*;
//import com.google.ads.util.*; // こっちはいらないと思われ。

スケッチフォルダにあるAndroidManifest.xmlを編集(赤色のところ)

# vi AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:versionName="1.0"
package="">
<uses-sdk android:minSdkVersion="10" />
<application android:debuggable="true" android:icon="@drawable/icon" android:label="">
  <activity android:name="">
    <intent-filter>
      <action android:name="android.intent.action.MAIN"/>
      <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
  </activity>
  <activity
   android:name="com.google.ads.AdActivity"
   android:configChanges="keyboard|keyboardHidden|orientation|screenLayout" />
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

※っていうか、uses-permissionは、あとからProcessingのメニューで、

Android→SketchPermissionsで、ACCESS_NETWORK_STATEとINTERNETに

チェックを入れましたので、ここで記述しなくてもいいのかもしれません。


Processingのタブのところにある、NewTabからAdmob.pdeって名前でスケッチを追加する。

↓ Admob.pdeの中身を下記にする。

import com.google.ads.*;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.RelativeLayout;

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  // 使うのはpub-**********ではなく、ca-app-pub-*************/**********のほうだった。
  AdView adView = new AdView(this, AdSize.BANNER, "ca-app-pub-**********************/**************");
  AdRequest request = new AdRequest();

  // テスト機の指定
  request.addTestDevice(AdRequest.TEST_EMULATOR); // EMULATOR
  request.addTestDevice("11830D3FE8B00999B20BEF2E79999999"); // Genymotion
//  request.setTesting(true); // 全部テスト(これは認識していない気がする)

  adView.loadAd(request);

  RelativeLayout layout = new RelativeLayout(this);
  RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
    RelativeLayout.LayoutParams.FILL_PARENT,
    RelativeLayout.LayoutParams.FILL_PARENT);

  layout.setGravity(Gravity.BOTTOM|Gravity.CENTER);
  layout.addView(adView);

  this.addContentView(layout,lp);
}

Processingは、apk生成時にJAVAコードに一旦変換しているので、別pdeを作って、その中でonCreateをオーバライドして書けばいいだけなんです。とても簡単です。

(追記)Ad request successful, but no ad returned due to lack of ad inventory.

上記のようなエラーがLogcatで出て、うまく表示されないときは言語環境を英語に変更してみたら表示された。

日本語の場合だと表示までに、半日とか時間がかかるらしい。