12
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Flutter】AdMob広告のアプリID,ユニットIDをdebug/releaseビルドで切り替える

Last updated at Posted at 2021-12-20

ちょっと想像してみてください。

Flutterで作ったアプリで儲けたい!そう考え、AdMob広告をつけることにしたあなた。
開発中エミュレータを使用するため、AdMob広告のIDはテスト用のものを設定します。

アプリを頑張って作って、審査も通って、よし、リリースだ!
そんな時ふと気づきます。
「あれ、AdMob広告のID,本番用にしたっけ。。。?」

こんな経験、ありませんか?(私はあります。)

IDを変えるのを忘れなければ済む話ではあるんですが、
リリースにあたっての作業はかなり多く、IDを変える、のような細かいタスクは忘れやすいです。
また、IDを変える作業は結構手間でミスも発生しやすいです。
なので、この作業、自動でできるように検討しました。

本記事では、AdMob広告のアプリID,ユニットIDをdebug/releaseビルドで切り替える方法について解説します。
具体的には以下を解説します。

  • アプリID の切り替え
    • iOSの場合
    • Androidの場合
  • ユニットIDの切り替え

設定はちょっと手間ですが、一度やってしまえば、自分で変える必要がなくなるため、かなり快適になります。
ぜひ読んで、設定してみてください。

環境は以下の通りです。

  • Flutter version 2.8.1
  • Dart version 2.15.1
  • Android Studio (version 2020.3)
  • Xcode 13.2

##アプリIDの切り替え##
アプリIDはInfo.plistだったり、AndroidManifest.xmlだったりのネイティブの部分の設定となります。
iOS、Androidそれぞれの場合について解説します。

###iOSの場合###

Info.plistにアプリIDを設定する際、
debug/releaseでアプリIDが切り替わるよう、BuildSettingsで設定を追加します。

プロジェクトのiOSフォルダの上で右クリック
→ Flutter
→ Open iOS module in Xcode

でXcodeを開きます。

以下の手順を行い、設定を追加します。

  1. Runnerを選択
  2. TARGETSのRunnerを選択
  3. BuildSettingsを選択
  4. "+"を選択
  5. Add User-Defined Settingを選択

スクリーンショット 2021-12-20 18.45.46.png

設定名をADMOB_ID
debugにテスト用のアプリIDを、releaseに本番用のアプリIDを設定します。

スクリーンショット 2021-12-20 18.55.13.png

Android Studioに戻り、iOS/Runner/Info.plistを開きます。
Info.plistに以下のコードを追加します。

<key>GADApplicationIdentifier</key>
    <string>${ADMOB_ID}</string>

iOSの設定は以上になります。

今回の設定だと、iOS/Runner.xcodeproj/project.pbxprojファイルに、
設定したアプリIDが記述されます。
GitHubにpublicで上げる場合は、このファイルを.gitignore指定するなど、対応を検討してください。
(アプリIDを公開していいかどうかは要検討です)

###Androidの場合###

AndroidManifest.xmlにアプリIDを設定する際、
debug/releaseでアプリIDが切り替わるよう、appbuild.gradleで設定を追加します。

まず準備です。
android/appgradle.propertiesというファイルを作成します。
admobAppIdDebugにテスト用の広告IDを、
admobAppIdReleaseに本番用の広告IDを記載するようにし、
以下のようにgradle.propertiesに記載します。

admobAppIdDebug=ca-app-pub-3940256099942544~3347511713
admobAppIdRelease=ca-app-pub-****************~##########

次にandroid/appbuild.gradleに上で用意したpropertyを読み込む関数を定義します。

def loadProperties(filename) {
    def props = new Properties()
    file(filename).withInputStream {
        props.load(it)
    }
    return props
}

そのままandroid/appbuild.gradleに以下のようにコードを追加します。
buildTypesdebugがない場合は、追加してください。

android {

//省略

    buildTypes {
        debug {
            def props = loadProperties("$rootDir/app/gradle.properties")
            manifestPlaceholders = [admob_app_id: props.admobAppIdDebug]
        }

        release {

                         //省略

            def props = loadProperties("$rootDir/app/gradle.properties")
            manifestPlaceholders = [admob_app_id: props.admobAppIdRelease]
        }
    }
}

最後に、AndroidManifest.xmlに以下の文を設定します。

       <meta-data
           android:name="com.google.android.gms.ads.APPLICATION_ID"
           android:value="${admob_app_id}"/>

以上でアプリIDの設定は完了となります。

必要に応じて、難読化の処理や、gradle.properties.gitignore追加を行なってください。

##ユニットIDの切り替え##
ユニットIDの切り替えはDartファイル上で行います。
ad_helper.dartというファイルを作り、
このファイルでユニットIDを管理するようにします。

ad_helper.dartはこちら

import 'dart:io';

class AdHelper {

  static String get bannerAdUnitId {
    bool isDebug = false;
    //Debugモードの時のみ以下が実行される
    assert(isDebug = true);

    if (isDebug) {
      if (Platform.isAndroid) {
        return "ca-app-pub-3940256099942544/6300978111";
      } else if (Platform.isIOS) {
        return "ca-app-pub-3940256099942544/2934735716";
      } else {
        throw UnsupportedError("Unsupported platform");
      }
    } else {
      if (Platform.isAndroid) {
        return "ca-app-pub-****************/##########";
      } else if (Platform.isIOS) {
        return "ca-app-pub-****************/##########";
      } else {
        throw UnsupportedError("Unsupported platform");
      }
    }
  }
}

assert()がdebug時のみ実行されることを利用して、
isDebugがdebug時にtrueになるようにしているのがポイントです。

使い方は、広告IDを必要とするところで、

AdHelper.bannerAdUnitId,

とするだけです。

今回はバナー広告用の設定のみですが、
他の広告ユニットでもゲッター関数を追加することで対応可能です。
ぜひやってみてください。

繰り返しになりますが、必要に応じてad_helper.dart.gitignore追加を行なってください。

##まとめ##

本記事では、AdMob広告のアプリID,ユニットIDをdebug/releaseビルドで切り替える方法について解説しました。
具体的には以下を解説しました。

  • アプリID の切り替え
    • iOSの場合
    • Androidの場合
  • ユニットIDの切り替え

一度この設定をしておけばもうリリース時に本番用広告IDに変えるのを覚えておく必要はありません。
広告ID変更の手間もおさらばできます。
ポカよけにもなりますので、AdMob設定の際にはぜひ導入を検討してみてください。

##参考##

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?