この記事は、技術に興味がある方向けに、SIMフリースマートフォンでの緊急速報メールの扱いについての技術的な動向を解説したものです。
「格安スマホ」での緊急地震速報・自治体防災情報・Jアラート(ミサイル発射警報)受信の一般的な事柄については以下の記事でまとめています。「格安スマホ」ご利用者の方は以下の記事をご覧ください。
「緊急速報」についてのキャリアからの発表
2017年12月25日に、TCA(一般社団法人電気通信事業者協会)1より、「Android™ における緊急速報「エリアメール」及び「緊急速報メール」の共通受信仕様を策定」という告知が掲載されました。
この告知によれば、docomoの「エリアメール」、au・SoftBankの「緊急速報メール」の仕様をAndroid 8.1向けに共通受信仕様として定めたため、Android 8.1以降であれば地震・津波だけでなく、自治体の防災情報やJアラートなども受信できるようになるということです。
以下、docomoの「エリアメール」、au・SoftBankの「緊急速報メール」を合わせて「緊急速報」と表記します
これまでの状況
今までにも何度かこのblogでも取り上げていますが、MVNOでご利用が多い「SIMフリースマートフォン」では、緊急速報の中でも「地震・津波」だけに反応し、それ以外の警報(自治体の発する防災情報・ミサイル発射などの情報)には反応しないという機種が多数でした。
これは、緊急速報で利用されるETWS(Earthquake and Tsunami Warning System)という仕組みで利用されるメッセージIDについて、地震・津波警報は3GPP2標準のIDが規定されているものの、それ以外の警報は「オペレーター(携帯電話会社)独自拡張」のIDが利用されていることに起因していると考えています。SIMフリースマートフォンは、スマートフォンメーカーが独自に開発しているため、こうした独自規格への対応ができなかったのです。
詳細は、以下の記事の「技術編」をご覧ください。
MVNOを含めた「格安スマホ」が普及し、SIMフリースマートフォンをご利用の方が増える中、SIMフリースマートフォンでも各種警報への対応が必要ではないかという声が高まっていました。前述の告知は、こうした状況を改善するものと言えます。
これ以降に掲載する情報は、IIJ独自の調査により確認したものです。すべてのケースについて確認は行っていませんので、掲載の情報と異なる動作をする場合もあります。また、時間の関係からdocomo網(PLMN 44010)についてのみ調査を行っています。
IIJでの実験
では、Android 8.1のスマートフォンでは信号を受信した際の挙動がどのように変わったのでしょうか。IIJでは携帯電話の基地局に変わってETWS信号を送信できる「基地局シミュレータ」を使い、実機の動作確認を行ってみました。
実験に使用したスマートフォン
- Nexus 5X Android 7.1.2 (N2G48C)
- Nexus 5X Android 8.0.0 (OPR6.170623.023)
- Nexus 5X Android 8.1.0 (OPM1.171019.011)
実験結果
Android 7.1.2では、緊急地震速報(地震・津波)で利用されていると思われる1100, 1101, 1102の各メッセージにだけ反応があり、自治体防災情報・Jアラートで利用されていると思われる、A001, A002, A390には反応がありませんでした。従来言われていたとおり、「地震」「津波」の警報には反応するものの、それ以外の警報には反応しないと言うことです。
一方、Android 8.0および8.1ではテストに使用したすべてのIDについて反応があることが確認できました。つまり、Android 8.0以降では従来反応できなかった緊急速報に反応する可能性があると考えられます。
なお、Android 7.1.2/8.0/8.1のいずれについても、警報に反応した際にはキャリアが販売するスマートフォンと共通の警報音が流れることも確認できました。IIJで行ったテストの模様を動画でご覧頂けます。(動画はAndroid 8.1で試したものです)
※参考: docomo エリアメールでの警報音 (YouTube)
興味深いのは、警報音と「地震です」というキャリアと共通のメッセージが流れた後に、画面に表示された文章が読み上げられていることです。テストで送信した「ETWS Earthquake Emergency by IIJ ! messID: 1100」などのメッセージが音声で読み上げられているのが動画でも確認できるかと思います。
念のため、日本語のメッセージを読み上げられるかも試してみましたが、残念ながらアルファベットの部分だけが読み上げられ、日本語部分は無視されてしまいました。(動画はAndroid 8.0で試したものですが、Andorid 7.1.2/8.1でも同様でした)
この機能はAndroidに備わっているものと思われます。大変興味深い機能ですが、日本国内の緊急警報は日本語で送信されているようなので、実際の警報送信時には機能しないかもしれません。
なお、今回の実験はあくまでNexus 5Xについて行ったものだという点にご留意ください。その他のスマートフォンでは異なる挙動を示す可能性があります。
Androidソースコードの調査
この実験により、Android 8.0/8.1では従来反応できなかった警報に反応できる可能性が確認できましたが、TCAの告知にあった「Android 8.1以降」(後日追記された記載によればandroid-8.1.0_r7以降)という説明とは矛盾があります。この理由を探るため、Googleが公開しているAndroidのソースコードを調べてみることにしました。
Androidは多数のモジュールに分割して開発が進められていますが、ETWSについては以下の二つのモジュールが関係すると推測しています。
- https://android.googlesource.com/platform/packages/apps/CellBroadcastReceiver/
- https://android.googlesource.com/platform/packages/apps/CarrierConfig/
注目したポイントは2箇所です
キャリアと共通の警報音が登録された
CellBroadcastReceiverのAdded custom alert tone support(2016.05.10)において、res/raw-ja/etws_earthquake.ogg
とres/raw-ja/etws_tsunami.ogg
という二つのファイルが登録されています。これが地震・津波の警報音です。
キャリア独自のETWSメッセージIDの情報が追加された
CarrierConfigのEnabled more cell broadcast channels for Japanese carriers(2017.01.20)において、assets/carrier_config_44010.xml
に記述が追加されています。3
このファイルの以下の部分が該当する箇所ものだと思われます。4
10 11 12 |
<string-array name="carrier_additional_cbs_channels_strings" num="1"> <item value="0xA000-0xA002,0xA004-0xA3FF:type=etws_default, emergency=true" /> </string-array> |
この記述から、docomoではオペレーター独自拡張の中で、A000~A0002、A0004~A3FFを何らかの警報に利用しているように見受けられます。IIJが推測していたメッセージIDもこの範囲内に含まれていますが、実際にはそれ以外のIDも利用されていたのかもしれません。
なお、この記述は後になってCarrierConfigからCellBroadcastReceiverに移動しています。該当の変更はCarrierConfigのMoved channels settings from carrier config to resources(2017.05.05)と、CellBroadcastReceiverのMoved channels settings from carrier config to resources(2017.05.05)です。
次に、これらの変更が、Androidのリリースにどのタイミングで含まれたかを確認します。Androidのリリースが行われると、git repositoryにtagが打たれるので、これを頼りに差分を確認し、時系列に並べると次のようになりました。
tag | commit | 備考 | |
---|---|---|---|
android-7.0.0_r35 | |||
Added custom alert tone support | 共通警報音対応 | ||
android-7.1.0_r1 | |||
: | |||
android-7.1.2_r36 | |||
Enabled more cell broadcast channels for Japanese carriers | オペレーター独自拡張ID対応 | ||
android-8.0.0_r1 | |||
: | |||
android-8.0.0_r17 | |||
Moved channels settings from carrier config to resources Moved channels settings from carrier config to resources |
設定移動(機能変更無し) | ||
Android-8.0.0_r21 | |||
: | |||
Android-8.0.0_r36 | |||
Android-8.1.0_r1 | |||
: | |||
Android-8.1.0_r7 |
キャリアと共通の警報音が導入されたのはandroid-7.1.0_r1以降、オペレーター独自拡張IDに対応したのが、android-8.0.0_r1以降であると考えられます。この結果は、IIJでの基地局シミュレータを使った実験とも矛盾しません。また、android-8.1.0-r7で修正が加わったという気配は見当たりませんでした。
今回はあくまで二つのモジュールに絞った調査であり、これ以外にも関連モジュールがある可能性もあります。今回の調査をもって、Android 8.0以降で対応したと断言する事はできませんので、ご留意ください。
2018.01.31追記
ここで紹介したcommitの後に、SoftBankのETWSメッセージIDに関する変更と思われるcommitが行われています。こちらは、android-8.1.0_r9にmergeされています。
また、TCAの告知でも、2018.01.25に「Android™ 8.1.0_r9 以上が対象となります。」と修正が入りました。
3キャリアすべてのメッセージIDに対応するのはAndroid 8.1.0_r9以降となるようです。
※本件についてはTwitterで情報をご提供頂きました。ありがとうございます。(Twitterの該当スレッド)
各メーカーが販売するスマートフォンへの普及について
ここまでの調査により、Googleが管理するAndroidのソースコードと、Nexus 5X実機において、緊急速報への対応が拡張されたことが確認できました。次に気になるのは、この拡張が各メーカーが発売するスマートフォンに普及するのかどうか、ということです。
各メーカーのスマートフォンに搭載されるAndroidは、Googleの管理するソースコードを元にしてます。このため、元にするコードがAndroid 8.1 (もしくは8.0)以降であれば、各メーカーのスマートフォンでも同じように緊急速報の対応が拡張されることが期待されます。但し、多くのメーカーはGoogleのソースコードをそのまま自社の製品に使うのではなく、独自の拡張や変更を加えています。このときに特定の機能について無効にしたり、設定を変更すると言うことも過去にありました。そのため、Android 8.1 (もしくは8.0)以降であったとしても、必ずしもNexus 5Xと同じ動作をするわけではありません。
緊急速報の対応拡張については、利用者からの期待も大きい話ですので、多くのメーカーがこの対応を取り入れてくれることを願っています。
余談: 「ETWS」とだけ書かれたメッセージを受信する件について
シミュレータではなく、実際の緊急速報を受信した際に、1通目で「ETWS」とだけ書かれたメッセージを受信、2通目で実際の警報を受信した、という話しをよく見かけます。実際に1月5日に発生した地震で私が持っていたスマートフォンでもそのようなメッセージを受信しました。
これは、ETWSのPrimary NotificationとSecondary Notificationによるものだと考えられます。ETWSでは、可能な限り最速で情報を伝達するために、最低限の情報(地震・津波などの種別)だけを含んだPrimary Notificationを最初に送り、続いて詳細な情報を含んだSecondary Notificationを送信するという仕様があります。このPrimary Notificationとして受信した信号をそのまま画面に表示してしまったために、「ETWS」とだけ書かれたメッセージになったのだろうと考えています。
なお、この記事で紹介した基地局シミュレータによるETWSの送信試験では、簡便化のためにSecondary Notificationだけを送信しています。