kotlinでandroid入門 広告表示 AdMob+SDK

googleが行っている AdMob での広告表示
・従来行っていたSDK方式
・Firebaseで行う方式
の２つの方法が有るらしい

基本 googleとしてはFirebaseを使ってほしいらしいが
まずは sdk のやり方

android studioでの作業でデバックまで

#### build.gradle (app)

```build.gradle
    dependencies {
        implementation 'com.google.android.gms:play-services-ads:15.0.1'
    }
```
 
 play-services-ads を追加
 バージョンはその時に調べて合わせてください
 
 
#### AndroidManifest.xml
 
```xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="jp.example.hoge.testadmob1">
  
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <meta-data android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

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

    </application>

</manifest>
```
 
・パーミッション INTERNET /  ACCESS_NETWORK_STATE　２つ
・meta-data android:name="com.google.android.gms.version
・android:name="com.google.android.gms.ads.AdActivity"
を追加

#### 画面

activity_main.xml

```xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="AdMod"
        app:layout_constraintBottom_toTopOf="@+id/admob_layout"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <LinearLayout
        android:id="@+id/admob_layout"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent">
    </LinearLayout>
</android.support.constraint.ConstraintLayout>
```

admob_layoutで表示用の場所だけつくってます
ボタン


#### MainActivity.kt 

```kotlin
class MainActivity : AppCompatActivity() {
    private val adTextDeviceId = "テストする端末のデバイスID"
    private val adTestId="ca-app-pub-3940256099942544/6300978111" // テスト用ID
    private var debugMode = true
    private var adUnitId="本番のID"
    private var blAdView : Boolean = false
    private lateinit var adMobView : AdView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 広告
        if(debugMode) {
            adUnitId = adTestId
        }
        adMobView = AdView(this)
        adMobView.adUnitId = adUnitId
        adMobView.adSize = AdSize.BANNER
        val adRequest : AdRequest = AdRequest.Builder()
                    .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
//                    .addTestDevice(adTextDeviceId)
                    .build()
        adMobView.loadAd(adRequest)
        button.setOnClickListener { _ ->
            redisplayAdMob()
        }
    }
    private fun redisplayAdMob() {
        if (blAdView) {
            // 表示時 -> 消す
            adMobView.visibility = AdView.GONE
            admob_layout.removeView(adMobView)
            Log.d("AdMob", "OFF")
            blAdView = false
        } else {
            // 非表示 -> 表示
            admob_layout.addView(adMobView)
            admob_layout.visibility = LinearLayout.VISIBLE
            adMobView.visibility = AdView.VISIBLE
            Log.d("AdMob", "ON")
            blAdView = true
        }
    }
}

```

ボタンを押すと、広告が表示／非表示の切り替え

あと、テストデバイスIDはしておいたほうが良いようです
実機でデバックする時に、間違えてクリックしてしまい
googleアカウントが停止になることがあるようです

テスト用のIDを使っていますので、コードだけのサンプルです。
本物の広告は表示されません。
実際に表示させるには goolgeのAdMobのサービス で自分用に広告ユニットIDをもらう必要があります。
サンプルアプリで広告は表示させられません。
この方法でアプリ公開する予定もないもので、行ってません。