Android スマートフォンのトラブルでもポピュラーなものが、通知が遅れる、来ない、鳴らないという症状。
僕も先日、Pixel 3aからPixel 5a (5G)に機種変更を行った後、Kyashの3Dセキュア認証キーをプッシュ通知で受け取ろうとした時、通知がすぐに来ずちょっと悩みました。
そもそもプッシュ通知はどうやって受け取っているのか
アプリからの通知をリアルタイムで受け取るには、実はGoogleの「通知サーバー」とのセッションが維持されている必要があります。Android端末はユーザーが何も操作していない瞬間でも、物凄く小さなパケット(Keep-Alive)を数分ごとの一定間隔で通知サーバーへと送り続けています。
定期的に、この端末は活動していますよ、という生存報告を行うことで、この端末は使われているんだ、じゃあ通知を送らないとね、ということではじめて通知を送ってもらえて、端末で通知の受信が出来るということです。
通知が遅れる原因
電池の最適化
もっともメジャーな通知が来なくなる原因は、電池の最適化と呼ばれるAndroid OSの省電力機能です。Android 6.0から追加され、7.0でも機能の拡張が行われています。
電池の最適化は日本語名で、別名をDozeと言います。Doze(居眠り)の名前の通り、この機能が有効になるとアプリはスリープ状態に入り、CPUやネットワークの利用を制限されます。そのため、バッテリーの消費が削減され、長寿命化が期待できます。
DozeはさらにDeep Doze(深い居眠り)とLightweight Doze(軽い居眠り)に分かれます。充電器に接続中は有効になりません。
Deep Dozeはディスプレイの電源が切られ、端末が静止した状態で長時間置かれた時に有効になります。GPSやBluetoothまで含めてネットワークの利用が制限され、アプリによって優先度が高く設定された通知以外を受信しません。このとき、利用状況によっては1日に1度程度に通知が制限されることがあります。基本的に端末が取り上げられた時にモーションを感知して、Deep Dozeは解除されます。アラームの設定時間が近づいた時も無効化されます。
Lightweght Dozeはディスプレイの電源が切られただけで有効になります。ネットワークの利用が制限され、アプリの同期・通知の取得間隔は数分間ごとに制限されます。このために通知が遅延する・すぐに届かないといった現象が発生します。
すぐに通知を受け取りたい、アプリが常時ネットワークを利用出来ないと困る…といった場合は電池の最適化を無効にする設定を行う必要があります。
※以下はPixel 5a (5G)およびAndroid 11にて確認
無効化するためには、
「設定」アプリを開く
「アプリと通知」→詳細設定をタップ、「特別なアプリアクセス」を開く
「電池の最適化」を開く
そのままだと最適化していないアプリが表示されるので、
「最適化していないアプリ」をタップ→「すべてのアプリ」を選ぶ
電池の最適化を無効化したいアプリを選択(右上の虫眼鏡アイコンをタップすると検索が出来ます)
「最適化しない」を選択→「完了」を選ぶ
(11月11日 追記)Android 12では、
「設定」アプリを開く
「アプリ」→○○ 個のアプリをすべて表示
電池の最適化を無効にしたいアプリを選択(右上の︙をタップでシステムアプリを表示、虫眼鏡で検索)
「バッテリー」をタップ
「バッテリー使用量の管理」より制限なしを選ぶ(追記ここまで)
通知の自動調整
電池の最適化とは別に、通知が来ない、遅れる原因となるのが「通知の自動調整」機能です。こちらは、Android 10から追加され、Android 11で機能の拡張が行われています。比較的最近に追加された機能なので、電池の最適化だけで想定通りに通知が機能せず、困惑されることが多いです。
通知の自動調整は、システムがアプリの利用状況や種別から通知の優先度を自動的に判断し、通知の頻度を減らしたり、通知音声を鳴らさずサイレントで通知のみを表示する、といった機能です。電池の最適化を無効にしているアプリでも、通知の優先度が低いとシステムに判断されたとき、通知の遅延が発生する場合があります。
こういった挙動を止めたい場合、通知の自動調整を無効にする必要があります。
※Android 11およびPixel 5a (5G)で確認
「設定」アプリを開く
「アプリと通知」→詳細設定をタップ、「特別なアプリアクセス」を開く
「通知の自動調整」を開く
「なし」を選択
(11月14日 追記)Android 12より上記、通知の自動調整は「拡張通知」に名称変更・移動され、
「設定」アプリを開く
「通知」セクションを開く
最下部の拡張通知のトグルスイッチをオフにする
で無効とすることが出来ます。(追記ここまで)
格安SIM(MVNO)
MVNOが提供する、いわゆる格安SIMにおいては様々な方法でコストの低減策が取られ、安価な通信費を実現しています。
前述の通り、スマートフォンが通知を受信するためには通知サーバーとの定期的なセッションの維持が必要となるのですが、利用しているMVNO事業者によっては一定時間通信していない時間が続くと、通信を自動的に切断してしまうことがあります。そうなるとセッションはタイムアウトし、通知が届かないということが起こります。
回避策として、メールアプリなどの設定で同期間隔を短く設定するとか、Keep-Aliveの送信間隔を手動で設定できるアプリなんてものもあります。まあ、最近はMNOの格安プラン、サブブランドが本当に安かったりするので、そちらに移籍するという手もありますが。
OEMベンダーのカスタマイズ
Android OSはサードパーティにより独自のカスタマイズが施されたカスタムOS(ストックROM)が存在します。Samsung GalaxyのOneUI、OPPOのColorOS、XiaomiのMIUIなどのことです。これらのベンダーはグローバルのAndroid マーケットで圧倒的なシェアを持ち、プレーンなAndroidよりもよっぽどユーザーが多く国内の通信事業者での取り扱いも増えています。
これらカスタムOSは省電力機能も独自で実装している場合があり、設定項目を自分で調整しないと通知が来ない、遅れるといった事象が発生することがあります。
SamsungのOneUIについては公式サポートが省電力機能についてのF&Qを公開しています。
■(Galaxy) 省電力モードを設定する方法を教えてください。 (省電力モードの設定で通知が遅れる、次回操作時にまとめて届く場合があります。)
OPPOのColorOSについては公式がアプリの通知が来ないときの対処法をアナウンスしています。
■アプリの通知が来ない際の対処法!|OPPO Class #7
国内市場に参入して日が浅いXiaomiはサポートも充実しておらず、公式のアナウンスやハウツーは存在しなさそうです。有志によるWikiや個人サイトなどを参照する他なさそうです。シャオミ機(MIUI13)には電池の最適化の設定はありません。
ASUSのZenUIについては公式サポートがいくつかのF&Qを公開しています。
■[ZenFone] [モバイルマネージャー] 「PowerMaster」とは何ですか? (バッテリーモードがパフォーマンスかスマート以外ではスリープ時に通信を行わない)
■「自動起動マネージャー」の機能でメモリを節約する (自動起動を停止することによって停止したアプリからの通知が表示されない場合がある)
バッテリ持ちへの影響
バックグラウンドアプリの動作を制限する機能を無効化することで、バッテリ消費にまったく影響が出ないということは考えにくいです。ただ、最近のAndroid スマートフォンは大型化に伴いバッテリ容量も大きく向上しています。最新のチップセットは低負荷時の消費電力については省エネ化しています。また、昔はそもそも存在しなかった機能ですから、これを無効にしたからといって著しく古いスマートフォンより電池持ちが悪化するということは基本的にありません。
スマートフォンでもっとも電池を消耗するのは、ディスプレイの点灯、それと高負荷でのCPUとGPUの利用です。