スリープ後、時間が経つとプッシュ通知が来なくなる件
Dプランでarrows M03を使用しています。
他の掲示板で話題になっていたので検証してみました。
「端末をスリープさせ、30分~1時間程度置いておくと、GmailやLala callのプッシュ通知が届かなくなる」という件です。
結論から言えば私の環境でもスリープ後、時間が経つとプッシュ通知が届かなくなりました。
【再現方法】
まず、アプリの設定で「通知をブロック」になっていないかを確認し、電源ボタンを押してスリープさせます。そのあと、別の端末からプッシュ通知が来るよう操作します。
(1) Gmail
パソコンからメールを送ると数秒で受信のチャイムが鳴りました。
(2) Lala call
Lala callアプリを起動していない状態で着信が鳴りました。
以上のように時間が経過していない状態だとプッシュ通知が正常に行われます。
次に、スリープ後30分経過してから同様の操作をしました。
(1) Gmail
反応無し。
(2) Lala call
反応無し。
端末のスリープを解除するとGmailは即座にメール着信し、Lala callは不在通知が届きました。
【Wi-Fi運用にしてみる】
画面消灯時にWi-Fiを切断しない設定にして、Wi-Fiをオンにします。電源ボタンを押してスリープさせ、30分経過後、別の端末からプッシュ通知が来るよう操作します。
(1) Gmail
検証せず。
(2) Lala call
Lala callアプリを起動していない状態で着信が鳴りました。
Lala callしか確認しませんでしたが、Wi-Fi運用だと時間が経ってもプッシュ通知が来ました。
【「優先通知」にしてみる】
Wi-Fiをオフにしたあと、「アプリの通知」でLala callとGmailを「優先通知」にして、電源ボタンを押してスリープさせます。30分経過後、別の端末からプッシュ通知が来るよう操作します。
(1) Gmail
検証せず。
(2) Lala call
反応無し。
「優先通知」にしてもモバイルネットワークでは30分経過後プッシュ通知が来なくなりました。
【Dozeモードをオフに】
Lala callとGmailの電池の最適化 (dozeモード) をオフにして、電源ボタンを押してスリープさせます。30分経過後、別の端末からプッシュ通知が来るよう操作します。
(1) Gmail
反応無し。
(2) Lala call
反応無し。
Dozeモードはスリープ時の消費電力を抑えるAndroid 6.0の新機能ですが、今回の現象とは関係ないかも知れません。
以下のサイトを参考にしたところ、原因として、いくつか見えてきたことがあります。
●格安SIMでの問題点 プッシュ通知の遅延 | みまもりステーション
http://www.mimamori.jp/news/580/
●creams@nexus: Google Cloud Messaging (GCM) で通知が来ない
http://creamsnexus.blogspot.com/2013/10/google-cloud-messaging-gcm.html
つまり、プッシュ通知を実現するためにはGoogleのPUSHサーバとセッションを維持しておく必要があるのですが、MVNOでは無通信状態でのコネクション・タイムアウトが端末のKeep-Aliveパケットの送信タイミングより早いため、セッションが維持されず、プッシュ通知が来なくなる、というものです。
しかもタイムアウトはMVNOによって異なり、sonnetやDMM、Freetelなどは短い(数分程度?)という報告もあるようです。
【対策1:メールの更新間隔を早める】
M03には「NX!メール」というPOP/IMAPメーラーが付いてきます。これでmineoメールの送受信をしているので、そのサーバチェック間隔を1時間から10分に早めてみました。そして1時間ほど置いて、別の端末からプッシュ通知が来るよう操作します。
(1) Gmail
検証せず。
(2) Lala call
反応無し。
10分ごとに受信動作を行うようにしたのでセッションは維持されると思いましたが、残念ながら時間を置くとプッシュ通知が来なくなりました。
【対策2:Push Notification Fixer No Rootをインストール】
先に挙げたリンクにも紹介されていましたが「Push Notification Fixer」というアプリをインストールします。Root版とNo Root版があり、Root化していない端末の場合はNo Root版を入れます。
端末はセッションを維持するための「Keep-Alive」動作で「ハートビートパケット」を送るのですが、このアプリはその送信間隔を早めることが出来るものです。
「Wi-Fi heartbeat interval」はAndroidデフォルトの15分にしておき、「Mobile heartbeat interval」を変えていきます。
まず10分を選び、「Apply settings」をタップします。「Heartbeat Updated!」と出れば成功です。そして30分経過させます。
【10分】
(1) Gmail
即座にメール着信のチャイムが鳴りました。
(2) Lala call
Lala callアプリを起動していない状態で着信が鳴りました。
次に間隔を変えていきました。
【20分】
(1) Gmail
検証せず。
(2) Lala call
Lala callアプリを起動していない状態で着信が鳴りました。
【28分】(最大値)
(1) Gmail
検証せず。
(2) Lala call
無反応。
以上の結果より、mineoは20分~28分の間でNATのセッションがTime-Outする仕様になっているのかな?と推測されます
「メールの受信間隔を10分にしてもプッシュ通知が来なくなる」など、まだいくつか理屈に合わない点もありますが、とりあえずハートビート間隔を「20分間隔」にして様子を見てみようと思います。
以上、素人の駄文でしたがプッシュ通知について悩まされている方は多いと思いますので何かの参考になれば幸いです。
プッシュ通知の遅延、不思議に思っていましたが、謎が解けました。
ご投稿、有難うございました。
勉強させてもらいました~。
\(^o^)/
スリープ中のgmail通知遅延がなんとかならないものかと
マイネ公さんと同じことをさせていただいて色々検証してきました。
wifi環境下でしか検証できていませんが、解決したっぽいのでお知らせいたします。
電池の最適化で『googleサービスフレームワーク』も除外してやると
スリープ1時間後でgmailでリアルタイム通知しました。
他の設定はマイネ公さんとほぼ一緒です。よろしければお試しください。
ちなみにLINEとかはプッシュ通知で届いてますでしょうか?
不具合に悩まされています。
機種はSHV32(android 6)です。
つい最近まで使っていたIS17SH(android 4)では問題ありませんでした。
検索していたら、ここに当たりました。
詳しい解説ありがとうございます。
まずはDOZEモード解除で試し、次にPush Notification Fixer No Root を
試してみようとおもいます。
上記アプリを使った場合、電池の減りはどうでしょうか?
また、PUSH通知を維持出来ないというのは致命的な問題と思いますが、
mineoは不具合対応してくれないのでしょうか。