AdMobという広告を試そうとしたときのこと。
Git環境にコミットする際に、アプリ ID(Application ID)や広告ユニット ID()ってソースコードに直書きするのよくない。
アクセスキー(Access key)も同様で、一元管理して、バージョン管理システムを使っていても運用しやすいようにしたいな。
でも、どんな方法がいいかなと思い、調べたので情報を残しておきます。
参考:AdMob公式のスターとガイド
こんな感じに書くって示してくれている。
けど、テストならまだしも、これでリリースはよくないなと。
<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"/>
</application>
</manifest>
雑な解決方法としては、テスト用のIDはコミットして、本番用は、リリースしないとか?
個人で一回ぐらいならいいかもだけど、気持ちよくないなと。
解決策
コミットしない環境変数系を格納する箇所に書いてアクセスするようにしました。
定義と意味
値の定義
gradle.properties
admobAppIdDeub=ca-app-pub-XXXXXXXXX~XXXXXXXXX admobAppIdRelease=ca-app-pub-XXXXXXXXX~XXXXXXXXX admobUnitIdforDebug=ca-app-pub-XXXXXXXXX/XXXXXXXXX admobUnitIdforRelease=ca-app-pub-XXXXXXXXX/XXXXXXXXX
テスト用は公式でも表示されているので、隠さなくてもよさそう。
変数の定義
build.gradle
android { ・・・省略・・・ buildTypes { debug { manifestPlaceholders = [admob_app_id: project.property("admobAppIdDeub")] buildConfigField("String", "admob_app_id", "\"{$admobAppIdDeub}\"") resValue "string", "ad_unit_id", "$admobUnitIdforDebug" } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' manifestPlaceholders = [admob_app_id: project.property("admobAppIdRelease")] buildConfigField("String", "admob_app_id", "\"{$admobAppIdRelease}\"") resValue "string", "ad_unit_id", "$admobUnitIdforRelease" } } ・・・省略・・・ }
意味
manifestPlaceholders
→ AndroidManifest.xmlで参照できるようにするための設定
buildConfigField
→ ktファイル内で参照できるようにするための設定
resValue
→ xmlリソースファイル内で参照できるようにするための設定
呼び出し方法
Manifest
AndroidManifest.xml
<manifest ・・・省略・・・
<application
・・・省略・・・
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="${admob_app_id}" />
・・・省略・・・
</application>
</manifest>
ktファイル
例えば、MainActivity.ktのonCreate内とか
MobileAds.initialize(this, BuildConfig.admob_app_id)
リソースファイル
例えば、activity_main.xmlのConstraintLayout内とか
<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_alignParentBottom="true"
android:layout_centerHorizontal="true"
ads:adSize="SMART_BANNER"
ads:adUnitId="@string/ad_unit_id"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
値を定義しているgradle.propertiesは管理対象外にしておくこと
.gitignoreに以下が追加されていなければ追加しておくこと
gradle.properties
もし、gradle.propertiesが他の用途などでダメな理由があれば、local.properties等、別のファイルを検討します。
参考
https://wandering-engineer.tech/2019/05/01/how-to-use-gradle-properties/
コメント