DX関連の記事を書かねばと思いつつも、アプリ作成に没頭してしまいました。以前からアプリ公開の手順と広告の載せ方に興味がありまして、チャレンジしてみました。
デベロッパーワークフローの基本
アプリの作成
初めてのAndroidプログラミングです。Windows PCにAndroid Studioをインストールし、サンプルを見ながら定番のHello Worldを動かしてみます。
最初の感想は、Java言語なんですね・・・。
C言語やBASIC言語は使えるけどJava言語は使えない私ですが、なんとかなると言い聞かせて製造開始です。どうやらJavaを進化版みたいなKotlinが流行りらしいので、まず本を買ってみました。
Kotlinスタートブック 新しいAndroidプログラミング [ 長澤太郎 ] 価格:3,850円(税込、送料無料) (2025/3/2時点) 楽天で購入 |
アプリケーションは遊びでWindows版を作ったことがあったナンプレの解答を表示するものに決定し、黙々と移植コーディングです。これまでは業務用の飾り気のないアプリケーションの製造してきたものですが、やはり一般向けアプリとなると背景をカラフルにしたり、ボタンを画像にしてみたりと、素材集めに時間が取られてしまいます。
気付いてましたがデザインセンスの無さに悲しくなります。

動作仕様は、固定する数字をセットして実行ボタンを押すと解答を表示するものです。実行時には重複チェックによって設定ミスを検出する機能、固定する数字をセットした状態の保存/読込/削除の機能などを実装しています。固定する数字の設定によっては複数の解答があることになるのですが、ひとつ見つけたら完了としています。
本来は、Android端末の宿命である様々な画面サイズに対応する措置を取らなくてはならないのですが、今回の目的は、アプリ公開手順と広告の載せ方を体験することなので手を抜いてしまいました。自前のスマホでしか試してないです。たぶんタブレットなどの幅がある端末で実行すると、ボタンが重なったり不幸な状態になります・・・。
その辺はバージョンアップしながら修正していく方針とします。どのみちAndroid OSのバージョンや開発コンポーネントのバージョンが上がる度にアプリケーションも対応していかないと、ストアから消えていくことになりますので、修正版をリリースするタイミングはやってきます。
Google開発者登録
次にアプリケーションに広告を載せるために、Google AdMobというサービスに登録します。AdMobサービスは、アプリに広告を表示させる仕組みで、条件を満たすと広告主から費用が支払われます。
ここでアカウントを作成するとパブリッシャー IDが発行されます。また、広告ユニットを作成することで広告ユニットIDが発行されます。
以下のような広告ユニットが用意されており、用途に合わせて作成します。
- バナー
アプリのレイアウトの一部を占める長方形の広告で、一定間隔で自動更新可能です。 - インタースティシャル
アプリの自然な切れ目や移行のタイミング(ステージをクリアした後など)で表示される全画面広告フォーマットです。 - リワード
広告の視聴を選択したユーザーに報酬として特典を付与する全画面広告フォーマットです。 - ネイティブ アドバンス
アプリのデザインに合わせてカスタマイズできる広告フォーマットです。アプリのコンテンツに溶け込む形で表示されます。 - アプリ起動
ユーザーがお客様のアプリを表示したりアプリに切り替えた際に表示される広告フォーマットです。広告オーバーレイの読み込み画面です。
今回はリワード広告を選択しました。アプリケーションでは、解答検索により実行可能回数が減って、リワード広告の視聴により実行可能回数が増える仕様としました。
収益は見込めないと思っていますので、実習としての仕様設定となります。
広告の実装
1.アプリケーションのAndroidManifest.xmlファイルのApplicationセクションにパブリッシャーIDを記載する。 <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="***パブリッシャーID***"/> 2.リワード広告のユニットを作成し、報酬として10を設定する。 実行可能回数が10回分増えるという想定です。 3.アプリケーションに広告を視聴するボタンを設置する。 バナー広告の場合にはバナーのエリアを設置することになります。 4.アプリケーションに広告を視聴するコードを記述する。
import com.google.android.gms.ads.rewarded.RewardedAd
import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback
private var mRewardedAd: RewardedAd? = null
/* 動画の事前ロード */
adLoad(this)
private fun adLoad(activity: MainActivity) {
RewardedAd.load(this,getString("***広告ユニットID***", AdRequest.Builder().build(), object:
RewardedAdLoadCallback() {
override fun onAdFailedToLoad(adError: LoadAdError) {
/* ロードエラー */
/* 普通にロードエラーが発生するので、そのつもりでコーディングすること */
Log.d(TAG, adError.message)
mRewardedAd = null
adLoad(activity)
}
override fun onAdLoaded(rewardedAd: RewardedAd) {
/* ロード完了 */
Log.d(TAG, "Ad was loaded.")
mRewardedAd = rewardedAd
mRewardedAd?.fullScreenContentCallback = object: FullScreenContentCallback() {
override fun onAdDismissedFullScreenContent() {
/* 広告が閉じられた */
Log.d(TAG, "Ad was dismissed.")
}
override fun onAdFailedToShowFullScreenContent(adError: AdError?) {
/* 広告を表示できなかった */
Log.d(TAG, "Ad failed to show.")
}
override fun onAdShowedFullScreenContent() {
/* 広告が表示された */
Log.d(TAG, "Ad showed fullscreen content.")
}
}
}
})
}
/* MainActivity Classの onCreateイベント内で */
/* ボタンのリスナーと広告視聴のコールバックを設定 */
binding.btnAd.setOnClickListener {
mRewardedAd?.let {
it.show(this, OnUserEarnedRewardListener() { rewardItem ->
/* リワード取得の条件を満たした */
Log.d(TAG,"User earned the reward.")
remainCount += rewardItem.amount
})
/* 次の広告を事前にロード */
adLoad(this)
}
}
広告のテスト
アプリケーションは、パブリッシャー IDと広告ユニットIDを使用してAdMobサービスに広告をリクエストし、広告を受け取るという動作になりますが、Google Playに公開された製品バージョン以外で動作させる場合には、正規の広告ユニットIDではなく、テスト用の広告ユニットIDを使用することが定められていますので注意しましょう。
アプリケーションの公開
ひとまず完成したアプリケーションをGoogle Play Consoleに登録します。登録できるアプリケーションの前提は、署名されていることとリリース版としてビルドされていることです。
コンソール画面の『アプリを作成』ボタンを押してアプリケーションを登録します。APKファイルをアップロードした際に、署名の有無、対応バージョン等がチェックされます。APKファイルは一度アップロードされると同一バージョン番号のファイルは受け付けませんので、次回はバージョン番号を変えてビルドしたファイルを更新版としてアップロードすることになります。
その後、各種サイズのバナー画像、アイコン画像、スクリーンショットをアップロードします。しっかりと作り込んだ画像を用意するのが望ましいですね。ダウンロード数に違いが出てくるものと想像できます。私の場合は、慌ててフリー素材サイトから見繕った画像に文字入れして作成しましたので残念な出来になってます。
Google Playでのリリースには、内部テスト、クローズドテスト、オープンテスト、製品版の4フェーズが用意されています。テストフェーズではテストメンバーを限定するなどしたうえで評価を得ることが出来ます。
製品版のリリースでは、Google Playストアでの掲載情報、公開する国等を設定して、申請を行います。今回は1週間程度で許可されましたが、問題がある場合には問題を解消したのちに再申請となります。問題となるケースとしては、審査時点でクラッシュするケースが確認された場合、アプリケーションが申請と異なる内容であると判断された場合、レーティングが適切でない場合、公開指定した国での審査基準を満たしていない場合などが考えられます。
