先日、FujitsuのSIMフリースマホ「Arrows M03」を購入しました。
後継機の M04 が発売になったため、各所で値崩れしておりましたので、お得に購入できました。M03とM04はほとんどスペックが同じですので、もともと割高なロースペ機ですが新品2万以下という今の価格ならアリかと思いまして。
以前から私のブログを読んで下さっている方は「また富士通かよ…」とお思いの事かと存じますが、個人的に富士通スマホの使い勝手が好きなのです。
私も所有しております「ISW13F」ですとか、その兄弟機「F-10D」の頃は酷いもんだったと思いますが、その当時のイメージのおかげで人気が無く安く買えたりする側面もありますし、最近の機種はまあそれなりに安定しておりますので…。
前にも書いた事がありますが、私は中古や型落ちのスマホばかり使ってますので、私にとって初のAndroid 6.0 搭載機となりました。
ところが、この Android 6.0 の仕様のせいで思いがけず苦しみを味わうことになりました。今回はそのお話です。今回も情報系の記事なので長いです。
Gmail や LINE の通知が来ない
Android 6.0 以降のOSを搭載したスマホ+MVNOのsimという組み合わせにおきまして、GmailやLINEのプッシュ通知が来ないという問題が多発しています。
私もまさにその組み合わせでの運用でありまして、この問題に直面することとなりました。
スマホの使用中や、その直後はちゃんと通知が来るのですが、しばらく経つとウンともスンとも通知が来なくなります。
そして次にスマホを手にとって画面をONにした途端にまとめて通知が来るという現象が起こります。つまりプッシュ通知がリアルタイム性を欠いてしまうわけです。
次のセクションから、この問題についてグーグル先生に助けていただいて勉強しながら、ひとつひとつ問題を潰していった経緯をご説明していきたいと思います。
この時点でお断りしておきますが、GmailとLINEではLINEの方が対策が難しいのと、私にとっての個人的な重要度はGmailの方が高いという事情から、ほぼGmailに関しての内容となります事をご承知置きください。
今回は専門用語が多めですので、意味が分からない方は単語をコピペして適宜ググって下さい。でも、この問題で困って色々調べた末ここに辿り着かれた方にはだいたいお分かりになるかと思います。
MVNOのsim使用時のハートビート間隔の問題
まず「M03 プッシュ通知」などのワードで検索して上位にヒットするページの中で比較的分かりやすく、参考になったのはこちらのページでした。
詳細はリンク先を読んでいただくとしまして、上のページを読んで私がやった事を端的にまとめますと
「Push Notifications Fixer」というアプリをインストールして Mobile heartbeat Interval を15 minutes に設定(この設定はお使いのMVNOによって異なります。例えば私も使ってます「0sim」ですと 4 minutes だとうまくいくという声が多いです。)。
これだけです。
Androidでは Google Cloud Messaging (GCM) という仕組みでプッシュ配信をしています。
この仕組みでは各利用者のスマホとGoogleのサーバーの間でKeep-Aliveという微量のパケットを定期的にやり取りし続ける必要があります。
にもかかわらずMVNO各社はデータ通信量削減の為なのかどうか分かりませんが、通信のセッションが無通信でタイムアウトするまでの時間が大手キャリアより短くされているケースが多いです。その為
Keep-Alive送信間隔(ハートビート間隔といいます) > セッションタイムアウト時間
となってしまい、不具合が出るというわけです。これを解消するために「Push Notifications Fixer」でハートビート間隔を短くします。
お使いのsimに応じて適切な設定さえできれば、これで少なくともMVNOのsimを使っている事に起因するプッシュ通知の不具合だけは理論上解決できる事になります。
でも、この不具合の要因はそれだけではないのですね。
もう一つ、スマホ本体のOSの機能に起因する要因があります。
30分という時間でしか検証されていない事から上のページでは、ほとんどハートビート間隔しか考慮されていないと思います。スマホ本体のOSの機能に起因する要因、すなわち後述する「Dozeモード」にもコメント欄含め多少言及されておりますが、その面においては結局のところ有効な解決策に至っておりませんでした。
次はその「Dozeモード」についてもう少し調べてみました。
Android 6.0 から実装された省電力機能「Dozeモード」
Android 6.0 から「Dozeモード」という省電力機能が実装されました。
私もこの「Dozeモード」について「スマホをしばらく使ってないと、自動的にアプリが全部休止して節電する機能だろ?」というくらいの認識でしか知らなかったのですが、プッシュ通知の問題の解決を図るにはもう少し詳しく知る必要があります。
個人的に参考になったページを載せておきますので、ご存じない方はお読みになると良いかと思います。
Android M/NのDozeによる制限とバックグラウンドタスク実行に関するまとめ - QiitaQiita
個人的に一番重要なことQ. AlarmMangerで設定したアラームはDoze中に発火されるか?A. 浅いDoze中は発火される。深いDoze中は発火されない。深いDozeから抜けるアラームもAPI 23で追加されたが、Doze中は浅いDoze深いDozeにかかわらずネットワークアクセスが原則不可能1なので、これまで通りにAlarmManagerでなんでもできるというわけではなくなった。DozeDozeの概要簡単に言うと、Android端末が...
スマホをスリープ状態にして「電源に接続せず」かつ「移動させず」5分くらい経つとまず「浅いDoze」に突入しアプリの動作が制限されはじめ、そのままスマホに触れずに放置したまま30分くらい経つと「深いDoze」になり、さらに動作の制限が増えます。
「Dozeモード」中はその合間にメンテナンスウィンドウという状態が法則性のある周期で挟まれ、そのときに通信などの処理がまとめて行われるようです。
メンテナンスウィンドウの周期は「Dozeモード」に突入してからおおよそ1時間・2時間・4時間・6時間(以後6時間毎)らしいです。
Dozeモード対策に悩む
今回の問題を解決する為には、プッシュ通知を受けたいアプリ及びその関連アプリを「Dozeモード」から除外してやる必要があります。機種によって多少異なるかと思いますがM03の場合ですとやり方は
設定>電池>電池の使用量>右上のメニュー>電池の最適化>すべてのアプリ と進んでそこから目的のアプリを選び、ポップアップしたウィンドウから「最適化しない」を選択する
だいたいこんな感じかと思います。
上でご紹介したマイネ王のページでは「Gmailアプリ」と「Googleサービスフレームワーク」を電池の最適化をしないアプリにしてやると通知すると書かれていますが、先程も申しましたように、これは「浅いDoze」と呼ばれる状態である30分というスパンでしか検証されていませんので、2時間以上スマホを放置して「深いDoze」に入るとプッシュ通知が来なくなります。
何故Gmailアプリを「電池の最適化をしない」設定にしているのにDozeの影響を受けるのか、良く分かりませんでしたが基本的に GCM を利用するアプリは全部同様のようです。「GooglePlay開発者サービス」「Googleアカウントマネージャー」なども一緒に除外してみましたが駄目でした。
「深いDoze」に入っても当該アプリの通知の優先度が「高」になっていれば通知が来るらしいのですが、残念ながらGmailアプリの通知の優先度は「通常」らしいので、メンテナンスウィンドウのタイミングまで通知が「おあずけ」になってしまい、大幅に遅れる事になります。
ここで言う「通知の優先度」とは、アプリ内部の設定の事で、我々ユーザーは弄ることができません。スマホの「設定>音・バイブ・LED>アプリの通知>Gmail」にある「優先通知」の事ではありません。マイネ王のページでも勘違いしておられるのかなと思われる節がありました。
では何故Gmailアプリの優先度は「通常」になっているのか?これはどうやらアメリカ人と日本人のGmailの使い方の違いに起因するようです。
私も含めた日本人はGmailをキャリアメールの代替として使いたいので、常に通知が来てほしいと思っているのですが、アメリカではそのような用途にはSMSを使うのが一般的らしく、Gmailの通知はスマホを使うタイミングで来ればいいという感覚らしいです。
このような理由を鑑みますと、Gmailアプリのアップデートでの改善を期待するのは期待薄かなと個人的に判断しまして、他の策を探す事にしました。
GCM ではなく IMAP IDLE を利用したプッシュ通知
メールのプッシュ通知にはGmailアプリで使われている GCM だけでなく「IMAP IDLE」という仕組みを利用したものもあり、Gmailアカウントでも対応したメーラーを使う事で利用できます。
仕組みそのものは GCM と似たようなものだと思うのですが、「IMAP IDLE」はメーラーアプリを「電池の最適化をしない」設定にしてやれば、Dozeの影響を受けにくいようです。
今回の記事の最初の方で「LINEの方が対策が難しい」と申し上げた理由がここにあります。
Gmailアカウントは任意のメーラーで利用できますがLINEは基本的にLINEアプリでしか使えないからです。
「IMAP IDLE」でのプッシュ通知に対応するアプリはいくつかありますが、とりあえずフリーの「K-9 Mail」を使ってみる事にしました。
「K-9 Mail」へのGmailアカウントの登録方法は、ググればいくらでも出てきますがメールアドレスとパスワードを入れるだけであとは基本的に自動で設定してくれます。
あとは「K-9 Mail」アプリを本体で「電池の最適化をしない」設定にし、Dozeから除外した上でアプリ内の細かい設定を自分の利用状況に則して煮詰めていきます。
「K-9 Mail」は非常に細かくセッティングできます。初心者の方にはチンプンカンプンかもしれませんががんばりましょう。
「ぼくの考えた最強の設定」的なものを公開しておられる方も多いですが、通知の速さを重視するのか、バッテリー消費を重視するのか、通信費の節約を重視するのか、など人それぞれ重視するポイントが違いますのであまり鵜呑みにしないほうが良いと思います。
設定の各項目を正しく理解した上で自分の目的に合ったセッティングにしたほうがより幸せになれると思います。
とりあえず解決?
とりあえず私の利用状況に則した設定をしてスマホを放置、2時間30分後にPCからメールを送ってみたところ、10秒後くらいに「K-9 mail」の通知が来ました!
ここまでの戦いが長かった・・・。
ちなみにこの時点ではGmailアプリの通知もONにしてDozeからも除外してましたが、やはりGmailアプリの方の通知は来ませんでした。
私の使い方としては、
「キャリアメール感覚に近い通知がほしい」
「Gmailアプリも手動同期にして併用するのでとりあえず通知だけあれば細かい機能はいらない」
「ローカルのファイル容量は抑えたい」
「バッテリー消費はなるべく抑えたい」
といったところになりますが、通知関係の主だった所だけ私の設定を一応晒しておきます。先程、他人のセッティングは「鵜呑みにしないほうが良い」と書いたばかりですが、まあご参考までに…。
・1st クラスフォルダにしたのは受信トレイのみ
・グローバル設定
・ネットワーク>バックグラウンド同期 : 「自動同期がチェックされた時」
※これは「常時利用」に設定する事を推す人が多いですが私の使い方ですとこれで問題ありませんでした。
・アカウント設定
・メール受信>同期フォルダの同期間隔 : 「しない」
・メール受信>同期フォルダ : 「1st クラスフォルダのみ」
・メール受信>プッシュフォルダ : 「1st クラスフォルダのみ」
・メール受信>プッシュ接続の拡張設定>プッシュ接続時の同期 : 「ON」
・メール受信>プッシュ接続の拡張設定>IMAP IDLE(プッシュ)接続のリフレッシュ : 「24分毎」
・通知設定>受信メール通知 : 「ON」
・通知設定>通知するフォルダ : 「1st クラスフォルダのみ」
・通知設定>自分が送信したメールも通知 : 「OFF」
・通知設定>LEDを点滅 : 「ON」
・通知設定>メール同期通知 : 「OFF」
「K-9 Mail」に関しては私も初心者ですので、もっと良い設定があればご教示いただけると嬉しいです。
ちなみにこのセクションのタイトルが「とりあえず」となっているのはこちらのページ
DozeモードとGmail(5) - Fast&Firstのblog風
スタンバイ中にGmailを受けたい場合はどうしたら良いのか。 一つはAndroi...
にて、
との情報があったからです。
「長時間」というのがどれくらいを指すのか分かりませんが、私の使い方(3時間以上(今回未検証)スマホを放置する事も有り得ますが、そういう時はだいたいリアルタイムの通知を求めていない)ではなんとか実用になりそうだと思いましたので、これで「とりあえず」対策できた事にしたいと思います。
通知漏れなどがあるかどうかは、今後しばらく様子を見ていきたいと思います。
※追記: その後6時間放置しても通知が来ることを確認しました。
最後の手段 Doze無効化
今回、Gmailのプッシュ通知についてのみ対策しましたが、LINEのプッシュ通知が来ない方が死活問題という方も多いと思います。
ですが今回、私が調べた限りLINEのプッシュ通知対策は現時点では「Dozeモード自体を無効にする」という方法しかないようです。
Dozeモードを無効にする方法はいくつかありますが、ADBなどを使わずお手軽にする方法としては「Disable Doze」というアプリを使うのが簡単なようです。
有料アプリですし、私は試していませんので無責任な事は言えませんが、これで上手く行ったとおっしゃる方は多かったです。
まとめ
長いブログ記事となってしまいましたが補足も加えつつ、まとめると以下のようになるかと思います。
- Android 6.0 以降のスマホにおいて、一定時間スマホを放置するとGCMプッシュ通知が来ない・遅れる問題には「MVNOsimの無通信タイムアウトとハートビート間隔のミスマッチ」「Dozeモード」という2つの原因があり、それぞれ個別に対策する必要がある。
- 「MVNOsimの無通信タイムアウトとハートビート間隔のミスマッチ」についてはMVNO各社によって異なるので自分の使用しているsimの情報を集めて「Push Notifications Fixer」で対策する。何もしなくても問題ないsimもある。
- 「Dozeモード」については2時間以上スマホを動かさずに放置していると当該アプリの電池の最適化をしない設定にしていても殆どの通知が来なくなる。充電時以外2時間以上スマホを動かさずに放置する事が少ない方はこの事象に気付いていないだけの可能性もある。
- Gmailに関しては、Gmailアプリを使用せず「K-9
Mail」などの IMAP IDLE を使った通知に対応したアプリをDozeから除外して使う事で一応対策できる(私は
3時間6時間を越える放置は未検証)。
- LINEに関しては現状、「Disable Doze」を使うなどしてDoze自体を無効にするしか対策がない。
「MVNOsimの無通信タイムアウトとハートビート間隔のミスマッチ」「Dozeモード」という2つの原因ともに、人によっては問題が出ない・もしくは気付かないケースが有り得ますので、機種選定のとき「私は問題ない」とおっしゃる方の話を鵜呑みにするのは早計かと思います。
MVNO選びはともかく、スマホの利用スタイルは千差万別だと思いますので…。
おまけ Bluetoothの不具合
「Arrows M03」では今回書いたプッシュ通信の他に「Bluetoothに接続できない」というトラブルの声もよく見られます。
こちらに関しては以下のリンクの対策をそのままやって、とりあえず今のところ私の環境では問題ありません。
Android 6.0以降のスマホでBluetoothが接続できない、勝手にオフになる、再起動後にオフになる問題の対処方法
ここ最近非常に多いBluetooth周りの不具合・トラブル報告。昨年の後半くらいから急に報告が増え始め、感覚的にはAndroid 6.0.1およびAndroid 7.0搭載機種の増加と比例しているように感じます。一口にBT周りの不具合と言っ
他に目立った不具合の無い機種だからか、ほとんど同一内容(ケースやフィルムまで共通)の姉妹機種が「これでもか」と出ていますね。Arrows M04・Arrows M357・F-03H・F-05J・TONE m17・・・。
M04ではさすがにもうハードウェアを刷新して欲しかったところですが、形はどうあれ新機種として出してくれたおかげで投売りのM03が買えたという事情もありまして複雑な気分です。
コメントをお書きください
無名。 (月曜日, 11 12月 2017 18:43)
とても参考になる記事でした
ありがとうございますm(_ _)m
SENTON (火曜日, 12 12月 2017 19:11)
>無名。様
お読みいただきありがとうございました
あきら (土曜日, 03 2月 2018 22:38)
僕もキャリアメールの代替としてgmaiを使いたいのですが、なぜか通知が来ないときがある。。
この記事はすごく参考になりました。ありがとうございました。
SENTON (金曜日, 09 2月 2018 23:24)
>あきら 様
個人的に、今後は世間がメールという媒体には即時性を求めない風潮になっていってくれれば良いなと思ってます。