Unity/Android: Admobでのビルドできない、クラッシュするなど色々なエラーについて

# 前置き
試した内容をメモって最後にまとめようと思っていたが、
エラーに対してどの作業が影響して解決したかが
よくわからなくなったので箇条書きレベルのメモ。

# 最終的な解決方法
プロジェクトの確認。
Exclude PlatformsのAndroidにチェックが入っていた。
![Start_-_monster-chess-0_-_Android_-_Unity_2020_3_20f1_Personal__Personal___Metal_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561145/c5465ee0-2a5b-2cbc-590f-4a7d6c3d6c71.png)

Exclude = 除外する
凡ミス！！
これでbuild通るようになり、クラッシュもしなくなりました。

以下メモ。

# ビルドできない
## [試したこと1]プラグインのバージョンのダウングレード
プラグインのバージョンを
7→6.1.2
にダウングレード。

## [試したこと2]スクリプトの書き方の見直し。
プラグインのバージョンによって書き方がある。
Unity、エディタ側で参照エラーなどを吐くので調べながら書き直す。

## [試したこと3]manifest.xmlを見直す
エラー
```
Gradle build failed.
```
修正箇所

```XML
<manifest>
    <application>
        <!-- Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy（←アプリIDです）"/>
    </application>
</manifest>
```
原因
android:valueを広告IDにしていた。
↓
アプリIDに変更する。

## [試したこと4]Google Mobile Ads Unity Plugin入れなおす
別のエラーが...

### 試したこと4で起きたエラー
エラー
```
Resolution Failed.
Gradle failed to fetch dependencies.
```

#### 対応1 Folce Resolve
>/Users/name/.gradle/wrapper/dists/gradle-5.1.1-bin
>を消去して、もう一度Folce Resolveすることで対応できます。

治らない。

#### 対応2 distributionUrlを変える
（ProjectName）\Temp\PlayServicesResolverGradle を開く
PlayServicesResolver.scripts.gradle-template.zip の中にある
gradle/wapper/gradle-wrapper.properties を開く。

```gradle-wrapper.properties
distributionUrl=https://services.gradle.org/distributions/gradle-5.1.1-bin.zip
↓修正
distributionUrl=https://services.gradle.org/distributions/gradle-6.4.1-bin.zip
```
治らない。

# アプリが起動時にクラッシュする

## 検証方法
まず端末側で何が起きているか調べられるようにする。

「Android Logcat」をインストール。
https://nobushiueshi.com/unityandroid-logcat/

原因を見る
![Android_Logcat_と_Qiita.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561145/5273e8e2-9525-9f0a-9076-ccfdc202003b.png)

## [試したこと1]AndroidManifest.xmlを探る
>https://googlemobileadssdk.page.link/admob-android-update-manifest

とりあえずサポートを見てねと出たので見てみる
AndroidManifest.xml
が原因ぽい。

```
Plugins/Android/AndroidManifest.xml
Plugins/Android/GoogleMobileAdsPlugin.androidlib/AndroidManifest.xml
```
の２つあった。
わからなかったので両方直す。
```
Plugins/Android/AndroidManifest.xml
```
→ID変更
```
Plugins/Android/GoogleMobileAdsPlugin.androidlib/AndroidManifest.xml
```
→meta-dataを追記

↓
治らない！

## [試したこと2]Google Mobile Ads Unity Pluginのバージョンを確認
入れ直してみる。

v7.0.0（だめ）
↓
v6.0.0（だめ）
↓
v6.1.2（だめ）

結果、関係なさそう。

# その他
## Google Play Consoleのエラー

>アップロードされた APK または Android App Bundle には、インテント フィルタを使用するアクティビティ、アクティビティ エイリアス、サービス、またはブロードキャスト レシーバが含まれていますが、'android:exported' プロパティ セットは使用されていません。このファイルは Android 12 以降にはインストールできません。詳細: developer.android.com/about/versions/12/behavior-changes-12#exported

![Project_Settings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561145/0ecc5c87-30ad-6f37-ab35-ebadf0a2f03e.png)

## 広告が表示されない
AdMobの「支払情報」の登録する
「準備中」のままで変わらない...
48時間で表示されるようになるらしい。
確かに２日ほどで表示されるようになった。

## 広告の表示タイミングをコントロールする
アダプティブバナーを選択。
一度読む込むと最上位のレイヤーに出続ける。
ゲームオーバー画面だけに出したかったのでコントロールする。

```Csharp GoogleAdmobBanner.cs
public class GoogleAdmobBanner : MonoBehaviour
{
    public BannerView bannerView;
    void Start()
    {
        MobileAds.Initialize(initStatus => { });
        RequestBanner();
    }
    private void RequestBanner()
    {
        /*省略*/
        this.bannerView.LoadAd(adRequest);
        this.bannerView.Hide();//読み込んだあとは非表示にする
    }
}
```
あとは任意のタイミングでコントロールする。

```Csharp sample.cs
/*表示*/
GoogleAdmobBanner.bannerView.Show();
/*非表示*/
GoogleAdmobBanner.bannerView.Hide();
```