Googleマップが表示されない事象の発生から解決まで

概要

2022年3月9日早朝、自作アプリ“みてみて”を起動したところ、Googleマップが表示されないことに気付く。

慌ててGoogleマップを使用している自作アプリを片っ端から起動した結果、全滅でした。

なぜGoogleマップが表示されなくなったのか?

事象の発生から解決までの道のりを記事にしました。

Noアプリ名事象発生当時の最終リリース日
みてみて2022年2月24日
伊勢125社巡り2022年2月5日
伊勢テイクアウトなび2020年6月4日
みまもってね2022年1月15日
Googleマップが表示されなくなったアプリ一覧
伊勢125社巡り
マップ表示(改修前)
みてみて
マップ表示(改修前)

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のトラフィックを確認するとアプリではマップが表示されてないにも関わらず、データ通信は発生していました。

伊勢125社巡りのAPI(Map SDK for Android)のトラフィック

マップデータは受け取れている。となると次はアプリ内部の処理を疑わざるおえません。

アプリをデバッグモードで起動し、試しにデフォルトの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に設定することで解決しました。

それにしてもまさかアプリ内部処理が要因だったとは・・・

伊勢125社巡り
マップ表示(改修後)
みてみて
マップ表示(改修後)

後書き

今回の件で一番驚いたのはアプリ内のライブラリのバージョンを上げたり、コードを変更したりすることなく、Googleマップが表示されなくなったことです。

アプリの更新を行わずにアプリの挙動が変わるとは思っていなかったため、最初は外部要因(マップAPIのIF依存)だとばかり思っていました。

結局、今回の事象の真の要因は何かは分からないですが、アプリ自体を更新しなくてもアプリの挙動が変わってしまうことがあるというのは勉強になりました。