概要
2022年3月9日早朝、自作アプリ“みてみて”を起動したところ、Googleマップが表示されないことに気付く。
慌ててGoogleマップを使用している自作アプリを片っ端から起動した結果、全滅でした。
なぜGoogleマップが表示されなくなったのか?
事象の発生から解決までの道のりを記事にしました。
No | アプリ名 | 事象発生当時の最終リリース日 |
1 | みてみて | 2022年2月24日 |
2 | 伊勢125社巡り | 2022年2月5日 |
3 | 伊勢テイクアウトなび | 2020年6月4日 |
4 | みまもってね | 2022年1月15日 |

マップ表示(改修前)

マップ表示(改修前)
Googleマップの実装
最初に自作アプリにGoogleマップをどう実装しているかをざっくり説明します。
まず始めにデフォルトのMapsActivityを追加します。
ただし、そのままだとフラグメントのみの構成のため、ConstraintLayoutに組み込むようレイアウトを変更します。
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/constraint_map">
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Activity側のベースロジックは変更しません。
あとはGoogle Cloud Platformでプロジェクトを作成し、APIの有効化でMaps SDK for Androidを選択。
APIキーを入手後、AndroidManifest.xmlのメタデータにAPIキーを定義します。
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="MAP_API_KEY" />
最後にMapsActivityのタイトルを非表示にするため、Activityにスタイルを設定して完成です。
マップ表示は基本的に”com.google.android.gms.maps.SupportMapFragment”まかせの処理としています。
突然Googleマップが表示されなくなった
自作アプリは随時、改修を行っています。
今回問題が発生したアプリも2022年2月24日に改修してリリースしたものがありました。
もちろんリリース前に動作確認しており、そのときにはマップ表示に問題がなかったのです。
それから約2週間後、突然Googleマップが表示されなくなりました。
つまりアプリに手を加えていないタイミングでマップが表示されなくなったということです。
そうなるとまずはアプリ内部の処理ではなく外部を疑いたくなるものです。
解決までの道のり
まず疑ったのはマップデータが受け取れてないのでは?ということです。
GoogleマップAPIが使えなくなっていないか?
Google Clound Platformでプロジェクトの設定やAPIキーの制限を確認しますが問題ありませんでした。
次にGoogleマップの表示だけを行うサンプルアプリを作成し、APIキーを使ってみます。
するとGoogleマップが表示されました。
GoogleマップAPIは正常に機能していたわけです。
確かにGoogle Clound PlatformでAPIのトラフィックを確認するとアプリではマップが表示されてないにも関わらず、データ通信は発生していました。

マップデータは受け取れている。となると次はアプリ内部の処理を疑わざるおえません。
アプリをデバッグモードで起動し、試しにデフォルトのMapsActivityを追加してみます。
そして、アプリを動かしてみると。。。
デフォルトのMapsActivityにGoogleマップが表示されました。
そうなるとデフォルトのMapsActivityと作り込んだMapsActivityの違いを調べるだけです。
デフォルトのMapsActivityにコードを徐々に追加し、マップが表示されなくなるか確認。
なんと最後までGoogleマップは表示されました。
つまり、MapsActivityのコード内容には問題がなかったわけです。
あと違いがあるのは何か?
ここでスタイル設定に気が付きます。
デフォルトのMapsActivityにタイトル非表示用に定義したスタイルを設定してみると。。。
Googleマップが表示されなくなりました。
そう、原因はスタイル定義だったんです。
ちなみに問題となったスタイルが以下です。
<style name="AppTheme.NoTitleStatus" parent="@style/Theme.AppCompat.NoActionBar">
<item name="android:background">@color/colorBackground</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">false</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
</style>
このなかで問題を引き起こしたのがバックグランド設定でした。
事象から察するにマップフラグメントがバックグランドの裏に隠れるようになったのではないでしょうか。
今回の改修案としてはバッググランド設定を透明に変更したスタイルを新たに用意。
それをMaspActivityに設定することで解決しました。
それにしてもまさかアプリ内部処理が要因だったとは・・・

マップ表示(改修後)

マップ表示(改修後)
後書き
今回の件で一番驚いたのはアプリ内のライブラリのバージョンを上げたり、コードを変更したりすることなく、Googleマップが表示されなくなったことです。
アプリの更新を行わずにアプリの挙動が変わるとは思っていなかったため、最初は外部要因(マップAPIのIF依存)だとばかり思っていました。
結局、今回の事象の真の要因は何かは分からないですが、アプリ自体を更新しなくてもアプリの挙動が変わってしまうことがあるというのは勉強になりました。