最近AdMobを詰め込んだアプリをリリースしました。
このアプリには下記3タイプのAdMob広告を入れています。
- バナー
- インタースティシャル
- リワードインタースティシャル
導入方法をまとめます
目次
- 最近AdMobを詰め込んだアプリをリリースしました。
- AdMobで広告ユニットを作成する
- AndroidManifest.xmlにアプリIDを設定する
- バナー広告
- インタースティシャル広告
- リワードインタースティシャル広告
- テストデバイスを設定する
- AdMobポリシーを確認する
AdMobで広告ユニットを作成する
アプリに導入する前にAdMobで広告ユニットを作成します。 たくさん種類がありますが、導入したいモノを1つ選択します。
任意のユニット名を記入して広告を作成すると、ユニットを配置するためのアプリID
とユニットID
が表示されます。
例. (実際のIDではありません)
- アプリID:
ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy
- ユニットID:
ca-app-pub-xxxxxxxxxxxxxxxx/yyyyyyyyyy
AndroidManifest.xmlにアプリIDを設定する
AndroidManifestの<application>
内に下記のように設定します。
実際の AdMob アプリ ID を使用して下さい。
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
MainActivityで初期化
MainActivityでMobileAds.initialize(this)
を呼びます
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { // ... MobileAds.initialize(this) } }
バナー広告
2通りの方法があります。
xmlで配置する
<com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto" android:id="@+id/adView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" ads:adSize="BANNER" ads:adUnitId="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy">
ads:adSize
にBANNER
を指定します。
ads:adUnitId
にユニットIDを指定します。
コードで生成する
val adView = AdView(this).apply { adSize = AdSize.BANNER adUnitId = "ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy" }
広告を読み込む
注意点としてメインスレッドで行う必要があります。
val mAdView = requireView().findViewById(R.id.adView) val adRequest: AdRequest = AdRequest.Builder().build() mAdView.loadAd(adRequest) // Event Listener mAdView.setAdListener(object : AdListener() { override fun onAdFailedToLoad(error: LoadAdError) { super.onAdFailedToLoad(error) // error 処理 } })
loadAd
で広告を読み込みます。
広告のイベントリスナーを設定できるので読み込み完了時やエラー時に処理をさせたい時に便利です。
詳細はこちら見るといいです→ 広告イベント
インタースティシャル広告
広告を読み込む
load
で広告を読み込みます。
var mInterstitialAd: InterstitialAd? = null var adRequest = AdRequest.Builder().build() InterstitialAd.load(context, "ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy", adRequest, object : InterstitialAdLoadCallback() { override fun onAdFailedToLoad(adError: LoadAdError) { mInterstitialAd = null // エラー処理 } override fun onAdLoaded(interstitialAd: InterstitialAd) { mInterstitialAd = interstitialAd // ... } })
FullScreenContentCallbackを設定する
FullScreenContentCallback
を設定することで広告表示に関するコールバックを受け取れます。
mInterstitialAd?.fullScreenContentCallback = object : FullScreenContentCallback() { override fun onAdDismissedFullScreenContent() { Log.d(TAG, "Ad was dismissed.") } override fun onAdFailedToShowFullScreenContent(adError: AdError?) { Log.e(TAG, "Ad failed to show.") } override fun onAdShowedFullScreenContent() { Log.d(TAG, "Ad showed fullscreen content.") mInterstitialAd = null // 広告表示後の処理を書く } }
広告を表示する
show
で広告を表示します。
if (mInterstitialAd != null) { mInterstitialAd?.show(requireActivity()) } else { Log.e(TAG, "The interstitial ad wasn't ready yet.") }
リワードインタースティシャル広告
広告を見たユーザーに報酬を与えたい場合、リワード広告を選択します。 アプリの自然な切れ目や移行のタイミングで広告を視聴することを前提としています。 通常のリワード広告との違いは、
- リワード広告はユーザーが広告の視聴を選択する必要があり
- リワードインタースティシャル広告は全画面での表示になります
広告を読み込む
load
で広告を読み込みます。
var mRewardInterstitialAd: RewardedInterstitialAd? = null val adRequest = AdRequest.Builder().build() RewardedInterstitialAd.load(context, "ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy", adRequest, object : RewardedInterstitialAdLoadCallback() { override fun onAdFailedToLoad(p0: LoadAdError) { super.onAdFailedToLoad(p0) mRewardInterstitialAd = null } override fun onAdLoaded(p0: RewardedInterstitialAd) { super.onAdLoaded(p0) viewModel.loadingAds.postValue(false) mRewardInterstitialAd = p0 // ... } })
FullScreenContentCallbackを設定する
リワードインタースティシャル広告もFullScreenContentCallback
を設定できます。
方法はFullScreenContentCallbackを設定すると同じです。
広告を表示する
show
で広告を表示します。第2引数にOnUserEarnedRewardListener
を設定することができます。
class MainFragment : Fragment(), OnUserEarnedRewardListener { // ... if (mRewardInterstitialAd != null) { mRewardInterstitialAd?.show(requireActivity(), this) } else { Log.e(TAG, "The reward interstitial ad wasn't ready yet.") } // ... // 広告の報酬を受け取る override fun onUserEarnedReward(rewardItem: RewardItem) { Log.i(TAG, "Reward Earned item.amount=${rewardItem.amount}, item.type=${rewardItem.type}") } }
報酬を受け取る
OnUserEarnedRewardListener
のonUserEarnedReward
がRewardItem
を返してきます。
RewardItem
には報酬の値(int)と種類(string)が含まれているので、適宜判定してユーザーに報酬を付与します。
下の例では、石5つを付与する想定でtypeにstone, 報酬の数に5が設定されているとします。
class MainFragment : Fragment(), OnUserEarnedRewardListener { // ... // 広告の報酬を受け取る override fun onUserEarnedReward(rewardItem: RewardItem) { Log.i(TAG, "Reward Earned item.amount=${rewardItem.amount}, item.type=${rewardItem.type}") if(rewardItem.type == "stone") { // ユーザーにamount分石を渡す user.addStone(rewardItem.amount) } } }
テストデバイスを設定する
開発中に実際の広告が表示されてしまわないように、テストデバイスを登録しておきます。 AdMob 管理画面で 設定>テストデバイス で登録できます。
端末上で広告IDを確認して登録するだけなのでしておくといいです。
AdMobポリシーを確認する
ポリシーを確認しておかないとあとで広告の配信停止をくらうことがあります。 例えば、インタースティシャル広告の場合には、以下のような禁止事項があります。
- アプリ起動時や終了時には表示してはいけない
- 連続して表示してはならない
- ユーザー操作 2 回につき 1 回以下の頻度にする
必ずガイドラインを確認しておくことを推奨します。
参考
https://developers.google.com/admob/android/quick-start?hl=ja#import_the_mobile_ads_sdk