Android StudioでAdMobを組み込んだメモ

先日のアプリを作るときに広告を組み込んでみようとやってみたら、Playストアでは8/1をもって古いAdMob SDKを使ったアプリの受付を終了しますと・・・
そこで新しいSDKを使ってAdMobを組み込んだときのメモを残しておきます。
参考:Admob からメール「最新版の SDK にアップグレードしてください」

基本的には公式のスタート ガイド – Google Mobile Ads SDK — Google Developersに沿って実装していくだけなんですけど・・・
レイアウトをxmlでやってるので、公式とはその点がちょっと異なるかも知れません。
環境:Android Studio (Beta) 0.8.2

1.Googleサービスのライブラリを組み込む

build.gradleを編集するのは多々あれど、GUIからの方法があまりない・・・?
メニューのFile->Project Structure…を選択
admob01
左のModulesから組み込みたいプロジェクトを選択して、Dependenciesタブの右上にある[+](Add)からLibrary dependencyを選択
admob02
Google Play Services (Wearableじゃないほう)を選択してOKで閉じていく
admob03
(見つからないときはAndroid SDK Mangerでインストールしていない可能性?)
するとbuild.gradleに追加されてプロジェクトのSyncが行われるはず

2.AndroidManifest.xmlへ追記

meta-data タグ

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
  <application ...>
    <meta-data android:name="com.google.android.gms.version"
               android:value="@integer/google_play_services_version" />
    <activity ...>
  </application>
</manifest>

AdActivity を宣言 (configChanges長ぇ・・・)

<manifest ...>
  <application ...>
    <meta-data ...>
    <activity ...>
    <activity android:name="com.google.android.gms.ads.AdActivity"
              android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
  </application>
</manifest>

uses-permission でネットワーク権限を設定(すでに組み込んでた)

<manifest ...>
  <application ...>
    <meta-data ...>
    <activity ...>
  </application>
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

3.AdViewをlayout.xmlへ追記

広告を組み込みたいレイアウトのxmlファイルを開く

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:ads="http://schemas.android.com/apk/res-auto"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <com.google.android.gms.ads.AdView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/adView"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        ads:adUnitId="AdMob広告ユニットID"
        ads:adSize="BANNER" />
</RelativeLayout>

親レイアウトにxmlns:ads=がないとads:xxx見つからない!って言われます
なんかプレビュー画面にRendering Problemsが出るけどライブラリが悪そうなので放置・・・

4.Activity.javaへ追記

広告の読み込み、停止と再開に結局コード書く必要があるっていう。。。

import com.google.android.gms.ads.*;
public class BannerExample extends Activity {
  private AdView adView;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout);

    // AdView をリソースとしてルックアップしてリクエストを読み込む
    adView = (AdView)this.findViewById(R.id.adView);
    AdRequest adRequest = new AdRequest.Builder()
                // テスト端末を登録しておく
                .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
                .addTestDevice("テスト端末のID")
                .build();
    adView.loadAd(adRequest);
  }
  @Override
  public void onPause() {
    adView.pause();
    super.onPause();
  }
  @Override
  public void onResume() {
    super.onResume();
    adView.resume();
  }
  @Override
  public void onDestroy() {
    adView.destroy();
    super.onDestroy();
  }
}

テスト端末のIDは指定せずに起動したときLogCatにこれ使えよ!って出てきます
以上、おつかれさまでした。
Screenshot

NendをAdMobのメディエーションとして設定するとき

AdMobについて調べてたときに、Nendいいよ!ってのを見かけたので、AdMobのメディエーション(他媒体の広告も表示させる)に追加しました。プロジェクトもSDKにあるライブラリを/libs/に入れるだけ、かんたん!

  • nendSDK-x.x.x.jar
  • nendAdapter-x.x.x.jar