受信メールを見ていたら、Google AdMobより「Google AdMob: 広告配信が中断されないよう、早急にご対応をお願いいたします」というタイトルのメールが来ていることに気づきました。
「お客様のアプリが現在 AdMob プログラム ポリシーに違反していることをお知らせするものです。広告配信が中断されないようにするには、お客様によるご対応が必要となります。」とのことで、何らかの対応を行わないとAdMobが使えなくなるというものでした。
正直なところ使っているユーザーは数名程度なのでAdMob広告も外してしまえば問題ないのですが、これもいい経験になるだろうと思って対応することにしました。
まずはAdMobのサイトで何が起きているか確認します。

問題のところには「サイトの仕様:ナビゲーション」とあります。
これだけでは何のことか分かりませんでした。詳細をどこから確認できるか分からなかったため修正リンクを開いてみました。

対処方法がざっくりとしていて、何をどうすればいいのかさっぱり分かりません。AdMobプログラムポリシーというリンクの先に何か分かるものがあるかと思って開いてみます。
以下のようなタイトルが並んでいました。
- ユーザーの利便性を考慮する
- ユーザーに広告のクリックを促さない
- アプリページ読み込み時の広告スペースを確保する
- コンテンツを提供しない画面に広告を表示しない
- 広告の更新
- 最新の SDK を使用する
- 適切な広告フォーマットをリクエストする
- 適切な広告フォーマットを使用する
- 広告のプレースメントの最適化
しかしながら「ナビゲーション」に関するものがどれに当たるのか分かりません。利便性のことかな?とも思いましたが、何をもって利便性が悪いのか分かりません。偶発的にクリックしそうな場所に広告があることが問題だと書かれていますが、ボタン等の機能でオーバーレイした場所に広告を置いてあるわけでもないのです。
うーん……。スクリーンショットに何か手掛かりがあるのかと思って見てみます。

1枚目のスクリーンショットは小説の執筆サポートで追加したChatGPTとチャットする画面のものでした。
AdMob側が英語端末で確認しているのか画面の言語が英語で表示されていますが、広告も表示されているし、機能としても特に問題が起きているような状態ではないように見受けられました。

2枚目のスクリーンショットはアプリ起動時に表示される小説一覧の画面です。
こちらも英語表示になっており、AdMob側がボタンを操作したのか適当な小説が2件ほど登録されている以外は特に問題はなさそうでした。
なお、以前にもAdMobから「ポリシー違反だから広告停止するぞ」と言われたときは、フローティングボタン(画面右下の青いボタン)が広告の上に表示されていて、「広告の表示を邪魔している」ということで少し上にずらした記憶があります。
しかし今回は全て表示されているので問題はないはずでした。
仕方ないので「admob サイトの仕様: ナビゲーション」でググりました。私と同様、皆さんも「どうしてポリシー違反になったのか分からない」というところで詰まっているようでした。
つらつら見ているとAdMobの説明で気になる文章がありました。

ダウンロード/ストリーミング配信コンテンツは提供していないし、無関係なページでもない、サイトのテーマやビジネスモデルと関係がないテキストも表示していません。しかし「存在しないコンテンツにリンクしている」とは何でしょうか?
ググりました。


上記2サイトで共通していたのは「アプリ起動時にデータがない場合はその旨を表示していないのではないか?」つまりユーザーに不親切なコンテンツになっているのではないか?というものでした。これが「存在しないコンテンツにリンクしている」に該当すると考えました。
AdMob および AdSense のプログラム ポリシー/導入に関するガイドラインにも以下のように記載されていました。

まっさらな画面に広告だけがあると、広告が実際のコンテンツだと解釈されてしまうことを恐れているようです。これだと思いました。
Novel editorはアプリ起動時に「小説一覧」画面を表示します。当然ですが最初は小説がないため、ユーザーには小説追加ボタンから小説を作ってもらいます。そしてこの画面に戻ってくると作られた小説が1行表示されている、という想定です。
ChatGPTとのチャット画面も同じで、最初はチャットがないので何も出ていません。画面下にあるチャット欄に質問を入力して送信し、初めて送信した文章と応答の文章がチャット形式で表示されるというものです。
つまり「コンテンツがないため広告が実際のコンテンツだと解釈されてしまう」状態になっていたのです。そこでどうするか?データがない場合はその旨を示しユーザーに次のアクションを促すような文言を表示させることで、広告がコンテンツと誤解されないようにしないといけません。
しかし一覧を表示していて該当データがないと空っぽに見える画面は他にもたくさんあります。これを全部対応するのか……正直なところ面倒だったので、とりあえず最初の小説一覧画面だけ対応しました。

小説一覧画面です。上にある「小説カテゴリー」には「長編」や「中編」「ショート・ショート」などのプルダウンがあり、それぞれに該当する小説のみフィルタして表示させていました。
初期表示は「全て」で、アプリインストール直後は小説がないので下には何もでず、結果的に「コンテンツがない」と判断されたのかな?と思いました。
なのでデータがない場合はその旨を告げる&次のアクションを促す文言を追加しました。
この状態でアプリをリリースしました。本来であれば内部テスト用のリリースを作って実端末で動作確認して……となるのですが、面倒なのですっ飛ばしてしまいました。良くないですね。
そうして新バージョンでのアプリで期待通りの動作になっていることを確認したうえで、AdMobに対応した旨を連絡しました。

審査には1週間かかるということでのんびり待つつもりでした。
そうしたら意外や意外、半日ぐらいでメールで連絡がありました。

やったー!
これで広告が引き続き表示されることになりました。
なお十数人だけが使っているアプリのため、広告による収入はまったくありません。とほほ。
なのでそんなアプリNovel editorをぜひ試してみてください。ChatGPTのサポート機能もついているので、このアプリで電子書籍を作ってKindleストアに公開して一攫千金を!