Androidでスリープ中に通知が来ない・遅れる原因、大半はMVNOのセッション・タイムアウト。アプリで改善可能

スポンサーリンク
スポンサーリンク

201611151622

ここ最近、Androidの様々なアプリからプッシュ通知が来ない、あるいは遅延するというトラブルを非常によく見かけます。

この通知問題があるアプリは有名どころではLINEやGmail、Twitter、Facebookなどですが、その他でも大量に報告があり、挙げるとキリがありません。

端末あるいはOSの設定変更によって改善するケースもある一方で、様々な方法を試してもやっぱりおかしい、というケースも多数。

ただこの問題、やたらとAsusのZenfoneシリーズやHuaweiのP9/P9、honor 8といったSIMフリー機種で多く、以前から気になっていました。

そんな中、この一連のプッシュ通知が来ない・遅延問題の原因として非常に参考になる情報がありました。

・アプリのプッシュ通知は、サードパーティー・アプリのサーバー→Google Cloud Messaging (GCM)→端末アプリという経路で届く

・プッシュ通知をリアルタイムで受信するにはこのGCMと端末がセッション(通信)を維持している必要がある

・このセッションがタイムアウトすると、リアルタイムで通知が届かなくなる

MVNOネットワークでは無通信状態の際のコネクション・タイムアウトが極端に短い(MVNOによって違いあり)

・キャリア回線はプライベートIPを割り当てるネットワーク構成なので、この問題はない?(よく分かっていません…)

・つまり、MVNOでは端末がKeep-Aliveパケット(GCMへの問い合わせ)送信するタイミングより早く、セッション自体が終わってしまう

・結果、次に端末をスリープ復帰するまでプッシュ通知が届かない、あるいは極端に遅延する。

(詳しい方からの補足や訂正ウエルカムです!)

と、まあ細かいことは置いておいて(よく理解していないので置いておかざる得ないのですが)一連の通知周りの不具合の原因はSIMフリースマホそのものではなく、SIMフリースマホの大半のユーザーが使っているMVNOのネットワーク仕様、ということですね。

つまり、逆に言えばキャリア版スマホでもMVNOのSIMを挿せば同じ現象が起こりうるということ。

もちろん、キャリア・ネットワークでも通知周りの不具合を報告しているユーザーもいるので、これだけが原因とは限りません。

ただ、SIMフリー端末でキャリア・ネットワークを使っているというユーザーの方が少数派ではないかと思われ、やはりこれが最も理にかなった説明かな、という気がします。

ちなみにソース記事ではこの問題についての対処法も紹介されています。

Push Notification Fixerというアプリで「Keep-Alive」動作で「ハートビートパケット」を送る間隔を早めることによってセッションを維持するというもの。

このアプリの設定で「Mobile heartbeat interval」を20分以下に設定すると良いようです。

ちなみにこのアプリでの対処方法、私自身もまだ検証中です。(今のところ通知は来ています)

ただ、バッテリー持ちへの影響などが出る可能性もあるので試す方は自己責任でお願いします。

コメント

  1. anonymous より:

    キャリア端末の場合でも省電力設定で使っている場合(バックグラウンドでの通信制御)や、Wi-Fi接続時に設定次第(スリープ時に接続しないなど)で発生する事は仕様上起こります。