AdmobをUnityで導入した時の話

# 導入イメージ
- アプリ画面下にバナー表示
- 全画面動画広告を見て、リワードとしてバナー表示を1日無効化する
- つまりバナー表示と、リワード動画再生ができればOK

# 前置き
- Unity2018
- Google Mobile Ads Unity Plugin v5.2.0
    - v3系導入時に記事を書き始めて、v5系でブラッシュアップしたので、所々古かったらすみません……
- 基本的に公式ドキュメントが素晴らしいので、それに沿って導入すればほぼ問題なし
- 初回導入時、色々エラーになって調べたりで、Firebaseをいれないといけないみたいな情報にも惑わされたが、Unityであれば、Google Mobile Ads Unity Pluginさえimportしておけば広告は表示可能



# まずはアカウント発行
1.アクセス：https://admob.google.com/intl/ja/home/
2.右上のお申し込みボタン押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/845899a0-0df3-a066-a32f-e46f79d2d498.png)
3.申し込みたいアカウントをよしなに選択
4.申し込みページでよしなに記載＆同意

# お支払い情報を登録する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/c141bbc2-3a84-53fc-9eb6-0ce4d96ee2c9.png)
1. お支払い情報を追加リンク
2. 登録情報を適宜入力して送信

# アプリ設定からGooglePlayとリンクする
1. サブメニューからアプリごとに、アプリ設定をしていく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/3bb21d06-93a8-d091-70f4-e9b31e48f450.png)
2. アプリとGOOGLE PLAYをリンク　のリンクを押下




# 広告ユニットの作成
## バナータイプ
1. メニューでアプリを選択：https://apps.admob.com/v2/apps/list
2. 新しいアプリの設定：https://apps.admob.com/v2/apps/create
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/a1968c4b-ea9a-ba78-4efe-7f477c3f83cd.png)
3. アプリの情報を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/61b6d35e-e0b8-889f-bbff-d93ed59b0dc7.png)
4. 確認＆広告ユニットを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/15790e7d-ef41-230f-4751-18a00d040405.png)
5. 広告フォーマットの選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/e37010fc-dee0-4a71-78f1-03238b52fdef.png)
6. 広告ユニットの作成（各項目、 `？` の説明が分かりやすいので、不明ならそちらを参照）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/a36457ad-2ca5-0345-2fcd-9596c7a91a35.png)

    7. 広告の種類：どちらも選択しておいたほうが良さそう。
    8. 自動更新：Googleによる最適化に任せるのが良さそう。
    9. eCPM Floor：[ヘルプ](https://support.google.com/admob/answer/3418058?hl=ja)の内容が分かりやすい。ざっくり、高めに設定すると高レートの広告を表示するけど、広告も無限にあるわけでないので表示できない状態が発生するケースが出る。なので、無難に無効にして、基本AdMobの動作に任せる。

7. iPhone用も同様の手順で作成する。
7. 完了したら、確認画面の情報に沿って、SDKの導入進める。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/98ece520-7e7e-ca09-ea98-425a024cde04.png)

## 動画タイプ
- 広告ユニット「リワード」に対して、バナー同様に作成すればOK。

## SDK導入
基本コレに沿って実施：[Mobile Ads SDK（Unity）スタートガイド]
(https://developers.google.com/admob/unity/start?hl=ja)
1. プラグイン（.unitypackage）DL：https://github.com/googleads/googleads-mobile-unity/releases
2. プラグインimport（Assets > Import Package > Custom Package）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/2a56b9e5-303e-f8a4-e7df-2962cf3298da.png)
3. 全て選択されているのを確認してimport
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/bef2ba69-2afd-df55-55f7-95428ee90243.png)
※play-services-resolverも含まれているので、一緒にimport
4. 確認ダイアログ等が表示されるのでよしなに確認＆進めてく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/cd28f287-1def-b636-9e46-0bfbb8446bd4.png)
5. 確認（Assets > Play Services Resolver > Android Resolver > Resolve）
こうなってればOKそう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/08334a1a-a9ed-a01b-d016-95a8da0fe8a4.png)
6. メニューの[Assets] > [Google Mobile Ads] > [Settings]より、アプリIDを入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/4cbe6eae-a38f-6f42-43a6-3841acb7b0ef.png)
7. 以下のようなスクリプトを作成、初回起動時に生成されるGameObjectにアタッチ

```c#:GoogleMobileAdsDemoScript.cs
using UnityEngine;
using GoogleMobileAds.Api;

public class GoogleMobileAdsDemoScript : MonoBehaviour
{
	public void Start()
	{
		// Initialize the Google Mobile Ads SDK.
		MobileAds.Initialize(initStatus => { });
	}
}
```

## バナー表示
- 公式のドキュメントそのままでいけた：[バナー広告](https://developers.google.com/admob/unity/banner?hl=ja)

## リワード動画
- こちらも公式のドキュメントそのままでいけた：[リワード広告](https://developers.google.com/admob/unity/rewarded-ads?hl=ja)
- 動画広告をみた報酬としての処理は、`OnUserEarnedReward`で呼び出す形にすればOK

## iOSについて
- switch platform実施時に、自動で必要なもののinstallなど色々処理されたので、特に困ったことなかった。

# トラブルシュート
## import時エラー
```
Gradle failed to fetch dependencies.
```
JDK入ってないだけだった。
インストール。

## 何か表示されない
```
07-03 10:26:32.555  5086  5109 E Unity   : AndroidJavaException: java.lang.ClassNotFoundException: com.google.android.gms.ads.MobileAds
07-03 10:26:32.555  5086  5109 E Unity   : java.lang.ClassNotFoundException: com.google.android.gms.ads.MobileAds

07-03 17:48:45.900  8645  8663 E Unity   : Caused by: java.lang.ClassNotFoundExc
eption: Didn't find class "com.google.android.gms.ads.MobileAds" on path: DexPat
hList[[zip file "/data/app/com.Yasuragitei.DayDayDay-2/base.apk"],nativeLibraryD
irectories=[/data/app/com.Yasuragitei.DayDayDay-2/lib/arm64, /data/app/com.Yasur
agitei.DayDayDay-2/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64, /syste
m/vendor/lib64, /product/lib
```

以下のケースで、解決できた。

- Resolveが上手くいっていない（Assets>Plugin>Andrdroid配下にxxx.aarがない）
    - Force ResolveすればOK

# Ad failed to load : 3
```
07-19 14:49:30.848 18028 18028 I Ads     : Ad failed to load : 3
```
こちら参考に、GooglePlayとAdMobの関係付けしてあげる。
[Admob on Androidで Ad failed to load : 3と言われるエラー](https://qiita.com/haniokasai/items/2289d3659ffc2000c57a)
ただ、関連付けしなくてもテスト時は問題ない（テスト広告が表示される）ので、あまり気にしなくてよい。
あと、広告がない時にも出力されていそうなので、その時は、`OnAdFailedToLoad`などで、アプリ側で広告ロードに失敗しましたなどの処理が必要になってきそう。

# 感想
- 初回は何故かすごく色々突っかかったが、一度環境が整うとGoogle Mobile Ads Unity Pluginのバージョンアップや、再importはスムーズに行った。きっとどこかに記載されている環境構築を最初にちゃんとやるべきだった……。
- テストが実機でしかできないのでつらい。

# 参考
- [eCPM](https://wa3.i-3-i.info/word16064.html)
- [Admob on Androidで Ad failed to load : 3と言われるエラー](https://qiita.com/haniokasai/items/2289d3659ffc2000c57a)