2021-06-05

OPPO Reno A のプッシュ系通知の考察



LINE やメール着信、IP 電話着信、Rakuten Link 着信 など即座に通知されないと困るものがあり、これを可能にするための設定と、バッテリー消費の関係を調べています。



ネット情報ではこのようなケースに対応するために次のことをせよ、とあります。



 1.省エネモード:オフ

 2.スマート電力消費保護:オフ

 3.省エネオプション → スリープ待機最適化:オフ

 4.対象のアプリについて

  「バックグラウンド実行を許可」に設定

  「自動起動」をオン 

 5.フォンマネージャーを無効化(停止または無効化)

 6.タスク一覧で当該アプリを「ロック」設定



これらの設定をするとバッテリー消費が著しく、また結構面倒で、誰でも理解の上でできるようなことではありません。


ほとんどの Andoid 機は、対象となる「アプリの最適化をしない」設定のみで済みます。



ところが Huawei / Xiaomi / OPPO などの中華スマホは独自の省エネ機構を持っていて、これが邪魔をしてスリープ中のプッシュ通知を取り逃がすことがあります。



OPPO の ColorOS は「アプリの最適化をしない設定ができません



代わりに独自の省エネ機構が搭載されているのですが、これがやっかいなシロモノです。






プッシュ系通知のために、本当にこのような設定が必要なのでしょうか。





前記のように「何々をせよ」という方はいても「何故なのか」という方はいません。





ですから「何々をせよ」が独り歩きしてしまっています。




私の OPPO Reno A はフォンマネージャーについては adb で無効にしてあります。





本当に必要なことをハッキリさせるために、省エネ関係の設定を一旦デフォルトに戻します。



 1.省エネモード:オン

 2.スマート電力消費保護:オン

 3.省エネオプション → スリープ待機最適化:オン

 4.対象のアプリについて

  「バックグラウンド実行をスマートに制限する(推奨)

  「自動起動」をオフ

 5.フォンマネージャーを無効化(停止または無効化)

 6.タスク一覧で当該アプリを「ロックしない



この状態でスリープ中でも、Whatsapp / LINE / Spark(メーラー)にはプッシュ通知がちゃんと届きます。



Softphone(Acrobits)も「プッシュ着信設定」していれば着信します。



Rakuten Link も着信します。


sms も Link で受信します。






にもかかわらず、冒頭のような設定をせよ、とおっしゃる方々がいます。


それはプッシュ系通知が失敗することが多々あるからです。







何故プッシュ系通知が失敗するのか、です。




ネットワーク状態が遷移して FCM(Firebase Cloud Messaging)がエラーになって Disconnect している場合です。



プッシュ系アプリは FCM を通じて定期的に KeepAlive しており、いざというときに通知を受けられるようにしています。




ところが FCM エラー時にこの KeepAlive が失敗します。

 
 
★ Softphone の KeepAlive 失敗の場合の FCM メッセージ

06-05 13:16:47.323 net=0: Received
cz.acrobits.softphone.alien
0:16222866608401864%88513ceb9cceb7c4
06-05 13:16:47.345 net=0: No response to broadcast from cz.acrobits.softphone.alien(id=0:16222866608401864%88513ceb9cceb7c4 time=16ms priority=HIGH)




そのために FCM が切断状態ではプッシュ系通知が失敗してしまいます。



多くのスマホの場合はすぐに FCM を再接続して問題は自動的に回避されるのですが、なぜか中華スマホは「切れっぱなし」になっているようなのです。




しかも中華スマホはスリープ中にこれが結構発生しています。



OPPO も例外ではありません。


ColorOS(=pseudo Android OS)のせいなのでしょうか。





同じ中華スマホでも UMIDIGI はそのようなことはありません。


台湾の MTK チップを使っているせいでしょうか。


pseudo ではない Android OS だからでしょうか。




FCM が正常に接続している状態では次のようになります。



★ Softphone の KeepAlive 成功の場合の FCM メッセージ

06-05 13:19:09.499 net=0: Successful
broadcast to cz.acrobits.softphone.alien
(id=0:1608401864%88513ceb9cceb7c4 time=135ms priority=HIGH)
06-05 13:19:09.527 net=0: Acked
cz.acrobits.softphone.alien:0
0:16222866608401864%88513ceb9cceb7c4





FCM エラーになるのは、WiFi が異なる WiFi-AP に切り替わったときや、ディープスリープで WiFi オフになってしまった、などの場合です。



OPPO 機は ディープスリープで何故か WiFi が切れることが多いのです。



WiFi 接続を維持する」設定もできませんので、これはほぼお手上げ状態です。



FCM がエラーだとプッシュ通知は届きません。



したがって Whatsapp / LINE / Spark どころか Rakuten Link も Softphone も着信できません。



この状態のとき、通話は標準の通話アプリに着信、SMS は標準のメッセージアプリに受信します。




これは網側で Link が応答しないために標準側に切り替えますが、10 秒ほど切り替えにかかり,この間は発信側は呼び出し音が鳴らず無音状態です。



切り替えができると呼び出し音がなり始めます。



これは困ってしまいます。


なぜかというと発信側は 10 秒も待たずに切る可能性が高いからです。


重要な電話や SMS を取りこぼす恐れがあります。




これを回避するには WiFi をオフにして LTE にし、FCM を LTE で接続状態にします。




LTE では FCM が切れにくいようです(通常の通話や sms に差し支えがあるからでしょう)。




省エネ関連設定がデフォルト設定の場合でもちゃんと再び通知がくるようになります。



または画面を一度オンにし、現在の WiFi-AP での接続を確認し、FCM 接続状態にします。




ただし、WiFi はスリープで再び切れることがありますので、WiFi オフの方がいいでしょう。


つまり「バックグラウンド実行」や「自動起動」設定しなくてもいい、ということです。





しばらくこの設定で運用してみます。











0 件のコメント: