[iOS/Android]Unityでadmobを実装する方法(iOS版SDK7.0.0対応)

実はとても簡単なんだけど、意外と情報がなかったりするので、まとめてみます。

どっか間違ってたらすみません。

 

ちなみに、下記公式マニュアルにやり方が日本語に翻訳されたので、こちらでも確認してみてください!

https://developers.google.com/mobile-ads-sdk/docs/games

 

1.SDKをDLしよう

まず、上記URLからadmobのSDKをDLしましょう!

ページ真ん中あたりにある、「Download the plugin」から、unitypackageをDLしてください。

sdk

github

 

GoogleMobileAds.unitypackage」というファイルがDLできればOKです!

 

2.Unityにインポートしよう!

UnityのAssets>Import Package>Custom Package…から、先ほどDLしたunitypackageをインポート!

custom

 

Importing_package_と_Untitled_-_admob_-_PC__Mac___Linux_Standalone

 

Unityのプロジェクトに下記のフォルダが追加されます!

(バージョンや環境によって若干違う可能性はあります)

project

 

それでは、各OSごとに対応させましょう。

 

3.Android対応

Android対応させるには、下記に気をつける必要があります。

・「Google Play services」なるものをAndroidフォルダに入れる

(・AndroidManifestの編集)←admob以外でManifestを使用している場合

 

 

3−1.Google Play Servicesをインポート

まず、AndroidSDKにある、「Google Play services」をインポートしましょう。

AndroidSDKのDL方法とかは、グーグル先生に各自聞いてください…(すまん)

※AdmobのUnityプラグインのバージョン3.0.0から、Google Play Servicesをインポートする必要がなくなったようです。3.0.0以降のSDKを使用する場合は飛ばしてください。

 

Google Play servicesのインストール方法ですが、Android SDK managerを起動して、インストールを行います。

下記はmac版のAndroid SDK managerの場所。(androidというやつを起動)

androidsdk_android

 

managerを起動したら、Extrasフォルダにある「Google Play services」をインストールしてください。

(Google Play services for Froyoというのもあるのですが、今回はいらないです)

androidsdk

 

インストールが終わりましたら、

<android_sdk>/extras/google/google_play_services/libproject/google-play-services_lib/

にインストールされていると思いますので、

UnityのPluginフォルダ>Androidフォルダの中にぶち込みます。

project2

これでOK!

 

3−2.AndroidManifestについて

基本的に、admob以外の広告でManifestを使用したり、自分で編集している方以外はこの項目は飛ばして大丈夫です。

Manifestを変更している方は、

<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik"
        android:value="true" />

上記のように、

unityplayer.ForwardNativeEventsToDalvikのvalueをtrueにしてください。

これだけで、android版はOKです。

4.iOS版対応

iOS版は、admobSDK7.0.0から、xcodeのフレームワークに変更されているので、

xcode上で作業を行う必要があります。

 

この段階では広告表示処理を追加していませんが、とりえあずxcodeのプロジェクトをビルドしておいて下さい。

 

まず、フレームワークをDLしましょう。

https://developers.google.com/mobile-ads-sdk/download

iossdk

 

次に、プロジェクトにフレームワークを追加します。

方法として、xcodeで設定する方法と、Unity側で設定する方法があります。

Unity5以降を使用している方は、Unityで設定した方が楽だと思います。

 

4−1.xcodeでframeworkを設定する場合

 

xcode

xcodeの「linkd Framework and Libraries」にて、admobに必要なフレームワークを追加しましょう。

下の方にある、+ボタンを押すと追加できます。

必要なものは下記(2015/2/25現在)

  • AdSupport
  • AudioToolbox
  • AVFoundation
  • CoreGraphics
  • CoreTelephony
  • EventKit
  • EventKitUI
  • MessageUI
  • StoreKit
  • SystemConfiguration
  • GoogleMobileAds.framework(先ほどDLしたもの)

です。

 

GoogleMobileAds.framework以外は、xcode内にあるので、検索フォームから探しましょう。

 

GoogleMobileAds.frameworkは、「Add Other」から選択します。

xcodeframework

frameworkopen

 

※Unity5.3.1p2現在、Unityからxcodeプロジェクトを上書き(Append)した際に、外部Frameworkのリンクが切れる現象が発生しています。
対処法として、Appendするたびに、Add Otherから.frameworkを再追加する必要があります

 

4−2.Unityでframeworkを設定する場合

 

UnityのPlugins>iOS以下に入れてある.hか.mファイルを選択すると
Inspector上で使用するframeworkを設定することができます。

Untitled_-_test_-_Android__Personal___OpenGL_4_1_

ここで使用するframeworkにチェックを入れておくと、
ビルドした際に自動でxcode側でも設定されるので、かなり便利です。

admobで使用するframeworkは下記になりますので、チェックを入れておきましょう。

(2015/2/25現在)

  • AdSupport
  • AudioToolbox
  • AVFoundation
  • CoreGraphics
  • CoreTelephony
  • EventKit
  • EventKitUI
  • MessageUI
  • StoreKit
  • SystemConfiguration

 

次に、DLしたGoogleMobileAds.frameworkをPlugins>iOS以下に入れましょう。

Untitled_-_test_-_Android__Personal___OpenGL_4_1_2

 

これで、Unityからビルドしただけでframeworkが自動で設定されます。

※windowsでUnityを使用している場合、この方法を行うとxcode側でうまく認識してくれない場合があります。Windowsの方は、素直にxcodeで.frameworkを入れましょう。

 

4-3.GoogleMobileAds.framework not foundの対処

(2016.09.08追記)

 

UnityをWindowsで使用している方

もしくはエラーでGoogleMobileAds.framework not foundが出る方は、

下記の方法でGoogleMobileAds.frameworkを入れましょう。

 

※必ず、Mac上でGoogleMobileAds.frameworkをDLし、それを使用してください。

 

プロジェクトのUnity-iPhoneで右クリック⇒Add Files to “Unity-iPhone”を選択

Project_navigator_contextual_menu_と_Unity-iPhone_xcodeproj

GoogleMobileAds.frameworkを選んだら、左下にある「Option」ボタンを押し、

必ず「Copy items if needed」にチェックを入れてからAddボタンを押します。

スクリーンショット_2016_06_12_2_55

 

これでnot found が出なくなるはずです。

 

4−4.@improtでエラーが出ないようにする

 

frameworkを追加しただけでは、エラーが出てビルドができないので、

xcodeのBuild Settings > Apple LLVM 6.1 – Language – Modules

にある
Enable Modules (C and Objective-C) を Yes に変更してください。

Unity-iPhone_xcodeproj

 

以上でXcodeの設定は終了です。

 

5.広告を表示しよう

広告を表示するためのスクリプトを作りましょう。

「Scripts」フォルダに「admobManager」的なファイルを作ります。

下記みたいな感じにします。

割りと適当なんで、ちゃんと修正して使ってね!

using UnityEngine;
using System.Collections;
using GoogleMobileAds.Api;

public class AdMobManager : MonoBehaviour {
	public string Android_Banner;
	public string Android_Interstitial;
	public string ios_Banner;
	public string ios_Interstitial;

	private InterstitialAd interstitial;
	private AdRequest request;

	bool is_close_interstitial = false; 

	// Use this for initialization
	void Awake () {
		// 起動時にインタースティシャル広告をロードしておく
		RequestInterstitial ();
		// バナー広告を表示
		RequestBanner ();
	}

	// Update is called once per frame
	void Update () {

	}

	public void RequestBanner()
	{
		#if UNITY_ANDROID
		string adUnitId = Android_Banner;
		#elif UNITY_IPHONE
		string adUnitId = ios_Banner;
		#else
		string adUnitId = "unexpected_platform";
		#endif

		// Create a 320x50 banner at the top of the screen.
		BannerView bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Bottom);
		// Create an empty ad request.
		AdRequest request = new AdRequest.Builder().Build();
		// Load the banner with the request.
		bannerView.LoadAd(request);
	}

	public void RequestInterstitial()
	{
		#if UNITY_ANDROID
		string adUnitId = Android_Interstitial;
		#elif UNITY_IPHONE
		string adUnitId = ios_Interstitial;
		#else
		string adUnitId = "unexpected_platform";
		#endif

		if (is_close_interstitial == true) {
			interstitial.Destroy ();
		}

		// Initialize an InterstitialAd.
		interstitial = new InterstitialAd (adUnitId);
		// Create an empty ad request.
		request = new AdRequest.Builder ().Build ();
		// Load the interstitial with the request.
		interstitial.LoadAd (request);

		interstitial.OnAdClosed += HandleAdClosed;
 		interstitial.OnAdFailedToLoad += HandleAdReLoad;

		is_close_interstitial = false;
	}

	// インタースティシャル広告を閉じた時に走る
	void HandleAdClosed(object sender, System.EventArgs e)
	{
		is_close_interstitial = true;

		RequestInterstitial();
	}
	// 広告のロードに失敗したときに走る
	void HandleAdReLoad(object sender, System.EventArgs e)
	{
		is_close_interstitial = true;

		StartCoroutine(_waitConnect());
	}

	// 次のロードまで30秒待つ
	IEnumerator _waitConnect()
	{
		while (true)
		{
			yield return new WaitForSeconds(30.0f);

			// ネットに接続できるときだけリロード
			if (Application.internetReachability != NetworkReachability.NotReachable)
			{
				RequestInterstitial();
				break;
			}
		}
	}

	public void interstitialShow()
	{
		if (interstitial.IsLoaded())
		{
			interstitial.Show();
		}
	}
}

このスクリプトをカメラなり空のオブジェクトなりにアタッチします。

admob_id

上記にadmobから発行されるIDを入力してください。

※IDは「広告ユニットID」を入力してください(パブリッシャーIDではありません)

 

各々でもっとうまい感じにカスタマイズしていただきたいのですが、簡単に解説。

RequestBannerでバナー広告の設定、RequestInterstitialでインタースティシャル広告の設定を行っています。

Awakeで2つを呼ぶことで、起動時に広告をロードするようにしています。

 

RequestInterstitial内で

if (is_close_interstitial == true) {
	interstitial.Destroy ();
}

としていますが、admobのインタースティシャルは、一度表示したらもう使えない使い捨てタイプのため、使い終わったらDestroyするようにしています。

Destroyせずに再読み込みすると、メモリ使用量がどんどん増えていくので、注意してください。

 

HandleAdClosedは、インタースティシャル広告が閉じられた時に呼び出されます。
HandleAdReLoadは、読み込みが失敗したときに呼び出されます。
機内モードとかのときに、延々とリロードを繰り返してしまうので、
通信状態をチェックしています。
(コルーチンとか使って、1分に1回リロードとかにした方がいいかも?)

 

ちなみに、インタースティシャル広告を表示するときは、

if (interstitial.IsLoaded()) {
    interstitial.Show();
}

で表示できるので、表示したいところで呼び出してください。

 

以上。

ね、簡単でしょ?

 

※admobは実装してからすぐは広告が表示されません。下記テスト用を試すか、何度かアプリの再起動をしてみてください。

※なお、テスト版でもすぐに表示されない場合があります。なんでやねん。

 

ちなみに、シミュレータで表示したかったり、テスト用で表示したい場合は、

AdRequest request = new AdRequest.Builder()
    .AddTestDevice(AdRequest.TestDeviceSimulator)       // Simulator.
    .AddTestDevice("テストデバイスID")  // My test iPod Touch 5.
    .Build();

みたいに、.Build()の前にAddTestDeviceで書くとできます。

デバイスIDですが、xcodeなりAndroid Device Monitorなりでログを見ると、デバイスIDが入ったログが吐かれているので、それを見るといいと思います。

 

そこら辺は他に詳しく書いてくれているサイトがたくさんあるので、そちらを見て頂けたら幸いです!

 

以上です!

 

余談

ちなみにですが、admobの管理画面でメディエーション(admobの機能を使って、複数の広告会社の広告を表示する機能)を有効にすれば、簡単にメディエーションも使えます。

 

各広告会社ごとに必要なSDKやフレームワークは違うので、そこは各々調べる必要がありますが、

その必要なファイルをPluginsフォルダに入れておけば、後はadmobの管理画面でカスタマイズできるので便利です。

簡単な割に効果はでかいので、是非チャレンジしてみてください!

 

LINEで送る
Pocket

You can leave a response, or trackback from your own site.

23 Responses to “[iOS/Android]Unityでadmobを実装する方法(iOS版SDK7.0.0対応)”

  1. ねこバタ会議 より:

    おお、これはとても助かりますね!
    実はiOSはバージョン7の実装方法がわからなかったので、
    しばらく(というかダメになるまで)バージョン6を使おうかと思っていました笑
    ブックマークしておかなくては!

    • めるくま より:

      僕も6系を使ってるんですが、いざ実装方法をまとめようと思ったら、
      6から7で仕様変わってる上にうまく動かなくて、焦りました笑

      まぁ、そのうちUnityプラグインも対応すると思うので、
      そうしたらもっと楽に実装できると思います!

  2. ぐずお より:

    大変助かりました。ありがとうございます!
    先日まで、以下のような形式でコードの変更方法を記載されていたと思いますが、
    削除されてしまったのでしょうか。
    ブックマークしてましたが、本日拝見したらなくなっていたもので。。
    できれば再掲載していただけたら大変助かります。
    よろしくお願いします。
    ——-
    GADURequest.h
     変更前
       #import “GADRequest.h”
     変更後
      #import
    ——-

    • めるくま より:

      コメントありがとうございます。

      admobSDkの最新版では不要な情報でしたので、削除しておりました。
      別の記事にて、情報を再掲載しましたので、下記をご覧下さい。

      http://games.genieus.co.jp/unity/admob700/

      ただ、iOS9に対応したSDKも公開されているので、可能であれば最新版にしたほうが良いかと思います!

      • ぐずお より:

        ありがとうございます!大変助かりました。
        iOS9…そうですよね。当然ながら最新版にすべきですよね。
        これから色々試行錯誤して対応してみます。
        本当にありがとうございました。

  3. より:

    この記事、本当に助かりました!
    わかりやすくて、しかも読みやすい…
    内容はもちろん記事の書き方まで参考になる素晴らしいポストだと思います。
    ブクマ必須です(笑

  4. Celena より:

    Unityでビルドしxcodeで書き出そうとしたら、
    Module “GoogleMobileAds” not found とエラーが出ます。
    GoogleMobileAds.frameworkはxcodeのproject内に入れ、Addしています。
    解決方法わかりますでしょうか?

    • めるくま より:

      申し訳ありません、コメントに今気付きました…
      もう解決されてますよね…?

      • ジョイ より:

        Unityでビルドしxcodeで書き出そうとしたら、
        Module “GoogleMobileAds” not found とエラーが出ます。
        GoogleMobileAds.frameworkはxcodeのproject内に入れ、Addしています。
        解決方法わかりますでしょうか?

        > こちらの方と同じ現象が出てビルドできない状況です。
        何かわかりますでしょうか。
        お手数かけます。

        • めるくま より:

          こちらで再現できているわけではないので、違うかもしれませんが、
          admobのUnityPluginとframeworkのバージョンが合っていなかったりしませんでしょうか?

          上記が問題ないようでしたら、
          xcodeのBuild Settingsにある

          Apple LLVM 6.1 -Language – Modules
            ↓
          Enable Modules(C and Objective-C)

          をYesに変更して試してみてください。

          それでもダメなら、下記にある方法で直るかもしれません。

          https://groups.google.com/forum/#!msg/google-admob-ads-sdk/-l2YHjoAKP8/xN9jJpYxkDUJ

          UnityPlugins内の.mファイルの

          #import “GADInterstitial.h”
          #import “GADBannerView.h”
          #import “GADRequest.h”

          #import

          に変更する

          • めるくま より:

            補足です。

            おそらくUnity5系で起こる現象だと思いますが、
            既にUnityからxcodeのプロジェクトをビルドしてある状態で、
            上書き(Append)する形でUnityからxcodeプロジェクトを再ビルドした場合、
            外部Frameworkのリンクが外れてしまう問題(?)が発生しています。

            なので、もしUnityから再ビルドした場合は、
            GoogleMobileAds.frameworkをもう一度addし直す必要があります。

            (ちなみに、再度addする場合は、既にaddしてあるGoogleMobileAds.frameworkを消したりする必要はなく、GoogleMobileAds.frameworkをaddする手順をもう一度行えば正常に動作します)

          • あああ より:

            Unityの方でPluginsにGoogleMobileAds.frameworkを入れることで解決できましたよ

  5. […] [iOS/Android]Unityでadmobを実装する方法(iOS版SDK7.0.0対応) 内容は少し古めですが、いいこと書いてあります。 […]

  6. beGunStudio より:

    AdmobのiosSDK(https://developers.google.com/mobile-ads-sdk/download)はMacOSでZipファイルを解凍しなければ
    ・Module “GoogleMobileAds” not found
    ・Umbrella header ‘GoogleMobileAds’ not found
    となります。

    このサイトの悪質な所は、(大変わかりやすくまとめてあるが)Unity上を伝えてある事が問題で、順番通りにUnity上でWindowsで解凍したiosSDKをインポートしてしまったら、(ちなみにFramework/plugins下に格納される、必ず削除してMacOSでAddし直すと良い)ずっと問題が解決できなくなる。

    なので改善点は、最初に、windows上ではiosSDKに関する作業してはダメという注意書きを書いておかないと大変大きな落とし穴が開いてるサイトになるので改善が求まれる。

    beGunStudio

    • めるくま より:

      ご指摘ありがとうございます。
      他の記事では説明していたのですが、こちらでは抜けておりました。

      追記させていただきました。

  7. Kenです より:

    私は
    https://github.com/unity-plugins/Unity-Admob
    切り替えた、そしてそれはずっと簡単ありません

  8. If some one desires to be updated with newest technologies therefore he must be pay a visit this website and be up to
    date every day.

  9. Terrific post however I was wanting to know if you could write a litte more on this topic?
    I’d be very grateful if you could elaborate a little bit further.
    Cheers!
    cheap nfl jerseys

  10. I know this website provides quality depending articles or reviews and additional data, is there
    any other web page which presents these things in quality?cheap
    jerseys from China (http://www.sarahbedrick.com)

  11. Medistar Pharmaceuticals sells Anavar and also Predisnone in Canada as well
    as numerous others.

  12. If you ask visitors to describe Madrid using some
    words, itrrrs likely that « Nature » won’t come
    up often. Sometimes local stores and eateries close with an hour or so during
    hot afternoons. Regarding the national scene, important stars such as Chano Dominguez, Juan Perro,
    Tequila, Diego “El Cigala” or Tomatito might be seen.

  13. Pinoy tambayan より:

    Fіոe way of telling, аոd pleasant piece ⲟf writing to tɑke
    facts abοut my presentation focus, աhich і аm going to convey in academy.

Leave a Reply

*

Powered by WordPress | Designed by: wordpress themes 2011 | Thanks to Best WordPress Themes, Find WordPress Themes and