2020-04-09に投稿

Flutterでちゃんとローカル通知を行う方法

Flutterでローカル通知を利用したアラーム系のアプリを作成する場合、flutter_local_notificationsを使うことで簡単に実装することができる。

しかし一点気にすべき点として、スマホアプリの場合電池消費を含む色々な観点から、バックグラウンドでアプリを動作させることについては色々と制限があるっぽい。flutter_local_notificationsについては一応そういったことを考慮し、問題ない形で通知を行うことができる機能を利用して実装されている。

そのため基本的には問題ないのだが、Androidの場合はそれでも問題がある場合がある。通知を行う時間が来ても、アイドル状態だと無視してしまう場合があるとのこと。(参考:Doze とアプリ スタンバイ用に最適化する

ではどうすればいいかというと、一応flutter_local_notificationsにはそれを考慮してくれるっぽいオプションがある。androidAllowWhileIdleというオプションで、具体的には下記のように使う。

await flutterLocalNotificationsPlugin.schedule(
  0,
  'scheduled title',
  'scheduled body',
  scheduledNotificationDateTime,
  platformChannelSpecifics,
  androidAllowWhileIdle: true,
);

一応flutter_local_notificationsのREADMEにもちらっと書かれてはいるけど、日本にもそれ以外の情報がぜんぜん無いし、実際に使ってみてどうかという声も見当たらなかった。

なので一応使ってみた感じをメモしておくと、今のところはもれなく通知が来ているような気がする。朝起きたときも通知が来ているし(充電しているから判断出来ないのかもしれないが)、日中もスマホを放置している時に通知が来ている気がする。

とはいえあくまで主観なので実際どうかはわからないが。Dozeも浅いDozeや深いDozeがあったりして色々複雑らしいので。(ちなみにiOS側も問題なく来てはいるが、そこまで確認はできていない)

……ということで、通知系アプリはちょっと本当にちゃんと通知されるのかを気にしながら作成はしたほうが良さそう。

ツイッターでシェア
みんなに共有、忘れないようにメモ

だら@Crieit開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, Vue.js, React, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!
ボードとは?

関連記事

コメント