8/06/2017

[Unity5.6] AdMobのテストバナー広告をリリース前にiPhoneで表示させる方法

この前色々失敗していたAdMob、なんとかテスト広告を表示できたのでまとめた!

Unityで作ったリリース前のアプリにAdMobを組み込んでみてiPhone実機でテスト広告を表示させてみる。
特定のシーンに表示させたり、時間がきたら消すような細かい設定は未対応。とにかく表示させることだけ考えた。



AdMobはUnityであれこれやってもビルド後にOS毎の設定をしなければならない。
iOSならCocoaPodsをインストールしたり設定するため、Xcodeやターミナルを使います。CocoaPodsとは、iOSやMac向けのアプリ作成に必要なライブラリ管理をしてくれるものだそう。

GoogleはFirebaseというサービスを推奨しているので、登録や設定まとめてみた。
さて、AdMobを使うためには大きく3つのステップがあり、ちょっと複雑。
これを理解するのにずいぶんかかった。。。

(1) AdMob For Unity
(2) Firebase
(3) CocoaPods

慣れないので、順番にゆっくりと進めたよ。

(1) AdMob For Unity

https://developers.google.com/admob/unity/start

上記から最新のパッケージをダウンロードしてunityのプロジェクトにインポート。
AdMob実装用に空のGameObjectをシーンに配置し、実装用のスクリプトをアタッチ。
だいたいAdCtrl.csとかAdMob.csみたいなスクリプトファイル名で、空のGameObjectもAdCtrlって名前にしている。
今回は全部のシーンにつける予定なのでシングルトンにして最初のシーンにだけ配置。

公式ではAdMobバナーを表示するのに最低限必要な記述を公開していて、
必要な情報を追加していく感じがいいのかな。

using GoogleMobileAds.Api;

private void RequestBanner()
{
#if UNITY_EDITOR
string adUnitId = "unused";
#elif UNITY_ANDROID
string adUnitId = "INSERT_ANDROID_BANNER_AD_UNIT_ID_HERE";
#elif UNITY_IPHONE
string adUnitId = "INSERT_IOS_BANNER_AD_UNIT_ID_HERE";
#else
string adUnitId = "unexpected_platform";
#endif

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

//AdPisitionの位置は座標でもOK↓
// Create a 320x50 banner ad at coordinate (0,50) on screen.
BannerView bannerView = new BannerView(adUnitId, AdSize.Banner, 0, 50);

//広告サイズのカスタマイズはこういう感じ↓
AdSize adSize = new AdSize(250, 250);
BannerView bannerView = new BannerView(adUnitId, adSize, AdPosition.Bottom);
私が今回テスト用にアタッチしたスクリプトは
テストモードとリリース用を分けられるようになっておる。そして、ファイル名の通り、シンプルにまとめてしまった。
using UnityEngine;
using GoogleMobileAds.Api;

public class AdsCtrlSimple : MonoBehaviour
{
    public static AdsCtrlSimple instance = null;

    public string iOS_Admob_Banner_ID; 
//testID" ca-app-pub-3940256099942544/6300978111"

    public bool testMode;
    BannerView bannerView; //the container for the banner ad

    void Start()
    {
        if (instance == null)
        {
            instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
        RequestBanner();
    }

    void RequestBanner()
    {
        //Create a 320x50 banner at the top of the screen
        if (testMode)//テストモードの時
        {
            bannerView = new BannerView(iOS_Admob_Banner_ID, AdSize.Banner, AdPosition.Top);

        }
        else
        {
            //code for live ad
        }

        //Create an empty ad request
        AdRequest adRequest = new AdRequest.Builder().Build();
        //Load the banner with the request
        bannerView.LoadAd(adRequest);
    }
}

↓こちらの方がいいかも。
クリアメモリ/【Unity】AdMobをUnityアプリに実装する方法

(2)Firebase

まず、Firebaseにアカウント登録。
https://console.firebase.google.com/

アカウント登録ができたらプロジェクトを登録。

FirebaseをUnityに追加するには下記のリンクから「SDKをダウンロード」をクリックしてパッケージをダウンロードします。
https://firebase.google.com/docs/unity/setup

既存のUnityプロジェクトを開くか、Unityプロジェクトをまだ用意していない場合は作成。
Firebase Unity SDK をダウンロードし、適切な場所で解凍したら、UnityプロジェクトにFirebase機能のプラグインをインポートします。

例:Firebase Analyticsを追加する



[Assets > Import Package > Custom Package] メニュー項目を選択します。
先にダウンロードした Firebase Unity SDK から FirebaseAnalytics.unitypackage をインポートします。
Import Unity Package ウィンドウが表示されたら [Import] をクリックします。

・iOS 用の設定
[iOS アプリに Firebase を追加] をクリックして設定手順に沿って進めます。

プロンプトが表示されたら、アプリのバンドル ID を入力します。必ずアプリで使用しているバンドル ID を入力してください。バンドル ID を設定できるのは、アプリを Firebase プロジェクトに追加するときだけです。
GoogleService-Info.plist ファイルをダウンロードします。このファイルはいつでももう一度ダウンロードできます。
Firebaseコンソールからダウンロードした GoogleService-Info.plistを、Unity プロジェクトの任意のフォルダにドラッグして追加します。
私はAssetフォルダ直下に置きました。特に問題なくビルドしてくれています。

iOS 用にビルドします。




・Android 用の設定も引用しまくっておきます
Unity 5.3 以降
Android 4.0(Ice Cream Sandwich)以降が搭載された端末
Unity プロジェクトのバンドル ID
Unity プロジェクトをまだ用意していない場合、Firebase 機能を試すだけであれば、クイックスタート サンプルをダウンロードしてご利用いただけます。クイックスタートを使用する場合は、バンドル ID が次のステップで必要になるため、プロジェクト設定からバンドル ID を忘れずに取得してください。
Androidアプリに Firebase を追加するには、Firebase プロジェクトと、アプリ用の Firebase 設定ファイルが必要です。

Firebase プロジェクトをまだ用意していない場合は、Firebase コンソールで Firebase プロジェクトを作成します。モバイルアプリと関連付けられた既存の Google プロジェクトがある場合は、[Google プロジェクトをインポート] をクリックします。それ以外の場合は、[新規プロジェクトを作成] をクリックします。
[Android アプリに Firebase を追加] をクリックし、設定手順に沿って操作します。既存の Google プロジェクトをインポートする場合、このステップは自動的に実行されることがあります。その場合は、設定ファイルをダウンロードするだけでかまいません。
プロンプトが表示されたら、アプリのパッケージ名を入力します。必ずアプリで使用しているパッケージ名を入力してください。パッケージ名を設定できるのは、アプリを Firebase プロジェクトに追加するときだけです。
google-services.json ファイルをダウンロードします。このファイルはいつでももう一度ダウンロードできます。
Androidアプリに SDK を追加する場合もiOSと同様に、Firebase Unity SDK をダウンロードし、適切な場所で解凍し、Unity プロジェクトを開いてインポートします。
[Assets > Import Package > Custom Package] メニュー項目を選択します。
先にダウンロードした Firebase Unity SDK から FirebaseAnalytics.unitypackage をインポートします。
Import Unity Package ウィンドウが表示されたら [Import] をクリックします。
google-services.json ファイルをプロジェクトに追加します。 Firebase コンソールからダウンロードした google-services.json を、プロジェクトの任意のフォルダにドラッグします。
Android 用にビルドします。

[File > Build Settings] メニュー項目を選択します。
[Platform] リストから [Android] を選択します。
[Switch Platform] をクリックし、ターゲット プラットフォームとして [Android] を選択します。
Unity ステータスバーの右下隅のスピナー(コンパイル中)アイコンが停止するまで待ちます。
[Build and Run] をクリックします。

(3)CocoaPods

ここを参考にしました。
iPhone アプリ開発/[iPhone] CocoaPods を導入、rubyを設定をする

CocoaPodsをインストールするには、まずターミナルを開き、
$ sudo gem install cocoapods
と入力。成功したらcocoapodsがインストールされているということです。
エラーが出たら以下を試します。
$ sudo gem install activesupport -v 4.2.6
$ sudo gem install cocoapods

cd 
と入力して
作ったプロジェクトフォルダをドラッグしてディレクトリをチェンジします。
c = チェンジ d = ディレクトリ


$ cd /Users/hoge/Unity/Hogehoge/ADtest
デスクトップに移動したいときはこれ↓
$ cd Desktop
$ pwd
ディレクトリがチェンジしているのが確認できたら
$ pod init
と入力してPodfileをインストール。
なお、すでにインストールされている場合もあります。

PodfileをXcodeで開き、
pod ‘Firebase/Core'
を追加します。
ファイルを保存して閉じてターミナルに
$ pod install
と入力すると .xcworkspace ファイルが作成されます。

もし、以下のようなエラーが出たら(私は出ました)

[!] Unable to add a source with url `https://github.com/CocoaPods/Specs.git` named `master-1`.
You can try adding it manually in `~/.cocoapods/repos` or via `pod repo add`.

以下のようにターミナルに手動で追加します。
cd ~/.cocoapods/repos
git clone https://github.com/CocoaPods/Specs.git master-1
うまくいったら再度
$ pod installと入力します。多分大丈夫なはず。。。

.xcworkspace ファイルができていたらそれを開いて次に進もう。

Xcodeのフォルダがずらっと並んでいる左側の「Unity-iPhone」下のFrameworksというフォルダを右クリックしてAdd Files to “Unity-iPhone”を選ぶ。

・Frameworkを追加
「Build Phases」「Link Binary Width Libraries」の下の方にある「+」をクリックして以下のFrameworkを追加(既に入っていることもあるそうなので確認)。

AdSupport.framework
AudioToolbox.framework
AVFoundation.framework
CoreGraphics.framework
CoreTelephony.framework
EventKit.framework
EventKitUI.framework
MessageUI.framework
StoreKit.framework
SystemConfiguration.framework

・Build SettingsのBuild Options にあるEnable Bitcode を「No」に。

Firebaseについては以下のような記述があるので調べなきゃ。
アプリの起動時に Firebase を接続するには、
メインの AppDelegate クラスに以下の初期化コードを追加します。
AppDelegate.swift

import UIKit
import Firebase
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?)
-> Bool {
FirebaseApp.configure()
return true
}
}

さて、Unityの場合はどうしたらいいのかわからない。
UnityからiOSビルドした時にUnityAppController.hとUnityAppController.mmがAppDelegateと同様の処理をしているそうだけど。 保留。
ここ解決しないと、もしかしたらFirebaseの初期化できなくて広告表示に影響あるのかな。

あとは、これが必要になることもあるかもメモ。
とりあえず、NSCalendarsUsageDescription他をInfo.plistにこんな感じで設定しましょう。
NSBluetoothPeripheralUsageDescriptionAdvertisement would like to use bluetooth.NSCalendarsUsageDescriptionAdvertisement would like to create a calendar event.

わからないところはちょっと置いといて、IdentifyやSigningを確認してビルドしてみた。

ビルドが成功したので実機で確認したところ、
ようやくテスト広告が表示されました!

0 コメント:

コメントを投稿