-
Notifications
You must be signed in to change notification settings - Fork 111
[Android] 電池の最適化の対象外とする(ホワイトリスト登録)導線を作るかを検討する #123
Comments
個人の見解です。 残念ながら
この試みはあまりうまくいかないのではないかと思います。 例えば、 v1.2.3 では 私が考える最良の方法は、Google のガイド |
ありがとうございます。 Force-stop handlingとホワイトリスト登録と、どちらもやる方向で検討していきましょう。 |
Oppoについては、搭載されている省電力機能「スマート電力消費保護」が1つの要因である可能性がある。
|
いち利用者の立場から言えば、積極的なホワイトリスト登録はちょっと拒否反応が出てしまいます。
という流れだと嬉しいです。 「よくある質問」問③-6 を充実させるだけでも良いのかもしれませんが、「よくある質問」は大分肥大化していて、ただの説明と利用者さんに行動を促すものとが混在していて正直少し見づらいな、と感じています。 Web ページにすることで、アプリリリースに縛られることなく修正・追記ができるようになります。 アプリからの動線ですが、多くの利用者さんに見て頂きたいのであればメイン画面にボタンを配置しても良いでしょうし、サポートさんへ問い合わせる前に確認頂きたいのであれば「よくある質問」と「メールで問い合わせ」の間にボタンを設けても良いかもしれません。 取るに足らない意見ですが... |
@tmurakami #106 でも触れられていますが、
くらいの扱いでしょうか。 設定画面に置いてもいいかもしれません(同じコードなのでiOSとの兼ね合いが悩ましいところではありますが)。 ホワイトリスト登録を求めたときにユーザーが一度拒否して、後からやっぱりホワイトリスト登録したくなった場合にアプリからの導線が失われていることは避けたいので、しっかりと整理していく必要がありそうですね。 |
参考情報です。 Oppoについて、前述に掲載したTwitterアカウントの方から「スマート電力消費保護」が有効になっていて、かつバックグラウンドでの接触確認が行われていなかった期間のログをもらって確認しました。結果、該当期間のログは一切、出力されていませんでした。 これは、そもそもバックグラウンドタスクが起動していない(Workerが起動されていない)ことを意味すると理解しています(実行途中でキャンセルされたなら最低限、初期化時のログくらいは出るはずという認識)。 この事例だとForce-stop handlingは効かず、ホワイトリスト登録が解決策として有効になりそうです。 |
ごめんなさい。 まず、アプリを Force-stop するとアプリが設定していたジョブのスケジュールはキャンセルされます。 class MyApp : Application() {
override fun onCreate() {
super.onCreate()
val req = PeriodicWorkRequestBuilder<MyWorker>(
PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS,
TimeUnit.MILLISECONDS
).build()
WorkManager.getInstance(this)
.enqueueUniquePeriodicWork("myWorker", ExistingPeriodicWorkPolicy.KEEP, req)
}
}
class MyWorker(appContext: Context, params: WorkerParameters) :
CoroutineWorker(appContext, params) {
override suspend fun doWork(): Result = Result.success()
} 適当なプロジェクトを作成してエミュレータにインストールすることで確認することができます。 上記コードを追加したアプリを Pixel 4 (API 30) のエミュレータで動かして、途中で
20:30、20:45、21:00 と 15 分毎に Worker が起動していますが、21:07 に Force-stop した後は Worker が起動しませんでした。 Force-stop でジョブのスケジュールがキャンセルされること自体は、違和感はありません。 ドイツの CWA はかなり初期のバージョンでホワイトリスト登録の導線を作っていたようなのですが、corona-warn-app/cwa-app-android#933 をさっと眺めた限りではホワイトリスト登録では対処できなかったようで、それで SAP と Google が協力して Force-stop handling の仕組みを作ったのかな?と推測しています。 Force-stop handling については私の理解不足も多々あると思いますので、可能ならば Force-stop handling の導入意図や実装上の注意点などを Google に問い合わせたほうが良いかと思います。 |
ありがとうございます。Force-stop handlingについてぼくが勘違いしていました。確かに、Oppoについても強制停止の状態になっている可能性がありますね。 ぼくがIssueをまだ立てていないのは、Force-stop handlingの正体をぼく自身がつかみ切れていないことがあります。経緯を含めて解説いただいて少し理解できた気がします。 次のURLを見る限りでは、COCOAの場合はApplicationのonCreateでWorkerを登録するように変更すれば、Google Play Service Layerがプロセスを起動したタイミングでWorkerも復帰するだろうと考えています。 https://developers.google.com/android/exposure-notifications/implementation-guide#workmanager あとは使われているExposureNotification関係のNuGetが古いので、そちらも更新が必要かもしれません。 ともあれ、開発チームを通じてGoogleへの問い合わせも行っていきます。問い合わせとしては2つ、Force-stop handlingの導入経緯(可能であれば)と、どのようにして導入するかの確認です。 後ほど別Issueを立てます。 |
あれからずいぶん時間がたってしまいましたが、教えていただいたForce-stop handlingの導入以降、バックグラウンドでの接触確認は問題なく動作しているようです。 したがって、電池の最適化の対象外(ホワイトリスト登録)の導線は作らない。として、今週末を目処に本Issueをクローズする予定です。 |
その機能リクエストは何らかの問題に関連しますか / Is your feature request related to a problem?
COCOAで接触確認を行うバックグラウンドタスクはWorkManagerを通じて実行している。
WorkManagerは端末の省電力機能(バッテリーセーバーなど)の影響を強く受け、電池残量やユーザーの設定によってはバックグラウンドタスクの起動が制限されて、接触確認が定期的に行われないことがある。
現在は、省電力機能が有効化されていることによって接触確認が定期的に行われないことがある旨、厚生労働省のウェブサイトで広報している。
https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/kenkou_iryou/covid19_qa_kanrenkigyou_00009.html#Q3-6
電池の最適化の対象外にする設定は設定メニューの奥にあり、ユーザーによっては操作で混乱する可能性がある。また、端末の機種によって少しずつ操作や各画面の内容が異なるので一律の案内が難しい面がある。
解決策についてお書きください / Describe the solution you'd like
アプリから電池の最適化の対象外とするように要求する(ユーザーに促す)APIが用意されている。
Doze とアプリ スタンバイ用に最適化する - その他のユースケースのサポート
https://developer.android.com/training/monitoring-device-state/doze-standby.html#support_for_other_use_cases
これを使って電池の最適化の対象外とすることで、ユーザーは複雑な操作をすることなくCOCOAを省電力機能(バッテリーセーバーなど)の対象外にできる。
あなたが考える代替案についてご説明ください / Describe alternatives you've considered
そもそも、電池の最適化の対象外とすることが正しいのか検討の必要がある(ユーザーが省電力を望むのであれば、その意思を尊重すべきと言う考え方)。
ホワイトリスト登録には適用適格な条件があり、COCOAがそれに該当しなければ「ホワイトリスト登録導線は作らない」という選択も当然考慮すべきと考える。
ホワイトリスト登録が可能なユースケース
https://developer.android.com/training/monitoring-device-state/doze-standby.html#whitelisting-cases
その他 / Additional context
本Issueの目的は検討であり、ホワイトリスト登録について広く意見を募るためにある。
作るか・作らないかを決定した時点で、結果を報告してクローズとする。作ると決まった場合、実装については別Issueにて行う予定。
Internal IDs:
The text was updated successfully, but these errors were encountered: