ちょっと想像してみてください。
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を開きます。
以下の手順を行い、設定を追加します。
- Runnerを選択
- TARGETSのRunnerを選択
- BuildSettingsを選択
- "+"を選択
- Add User-Defined Settingを選択
設定名をADMOB_ID
、
debug
にテスト用のアプリIDを、release
に本番用のアプリIDを設定します。
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が切り替わるよう、app
のbuild.gradle
で設定を追加します。
まず準備です。
android/app
にgradle.properties
というファイルを作成します。
admobAppIdDebug
にテスト用の広告IDを、
admobAppIdRelease
に本番用の広告IDを記載するようにし、
以下のようにgradle.properties
に記載します。
admobAppIdDebug=ca-app-pub-3940256099942544~3347511713
admobAppIdRelease=ca-app-pub-****************~##########
次にandroid/app
のbuild.gradle
に上で用意したpropertyを読み込む関数を定義します。
def loadProperties(filename) {
def props = new Properties()
file(filename).withInputStream {
props.load(it)
}
return props
}
そのままandroid/app
のbuild.gradle
に以下のようにコードを追加します。
buildTypes
にdebug
がない場合は、追加してください。
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設定の際にはぜひ導入を検討してみてください。
##参考##