Android

Androidでのローカルプッシュ通知実装

投稿日:2019年10月10日 更新日:

はじめに

こんにちは。カイザーです。今回は、Androidでのローカルプッシュ通知をするために、WorkManagerを使用した実装を紹介します。

WorkManagerとは?

Jetpackの機能の1つで、簡単に定期的もしくは単発のバックグラウンドタスクを定義し、実行することができます。
実際には、JobScheduler、FirebaseJobDispatcher、AlarmManagerのいずれかを、OSのバージョンや、Google Play Servicesのインストール状況によって使い分けてくれるものです。

WorkManagerの導入

app/build.gradleに以下追加します。

この後の実装をした際、以下のエラーが出る場合は、JVM target 1.8に変更する必要があります。

Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 1.6. Please specify proper '-jvm-target' option

その場合は、以下を追加してください。

Android Studio側にも同様の設定項目がありますが、記事執筆時点のAndroid Studio 3.5では、上記設定を記載しないと反映されません。

実装例

主な登場人物は、Worker、WorkManager、WorkRequestの3つです。

Workerは実際にバックグラウンドタスクとして呼ばれ、WorkRequestで実行方法を指定し、WorkManagerエンキューする流れになります。

Workerの実装

WorkerManagerに登録し、実際にバックグラウンドタスクとして動作するクラスを実装します。
今回は、ここでNotificationChannelにプッシュ通知する実装をします。

inputDataは、Workerをエンキューする時にあらかじめデータを渡され、実行時に使用可能なプロパティです。今回は、プッシュ通知のtitleに表示するようにしています。

OneTimeWorkRequestBuilderの実装

OneTimeRequestBuilderは、Workerを1回だけ動作させるリクエストです。

コンストラクタのGenericksでWorkerの型を指定します。

setInitialDelayで、Workerの実行遅延時間を設定できます。これにより、相対的にプッシュ通知を表示したい時間を設定できます。

PeriodicWorkRequestBuilderの実装

PeriodicWorkRequestBuilderは、Workerを定期実行させるリクエストです。

こちらは、コンストラクタで、リピート間隔を指定する必要があります。(第1、第2引数)

しかし、これだけでは確実に定期実行される訳ではありません。AndroidがDozeモードになっていると、実行されません。

そこで、実行時間(リピートする際に、何分以内に実行すべきか)を指定することで、確実に実行することができます。(第3、第4引数)

注意点としては、PeriodicWorkRequestでは、時間指定に制限があります。

リピート間隔は15分以上、実行時間は5分以上とする必要があります。これを満たしていないと、エンキューの際に以下ログと共に、Workerが実行されないので注意してください。

NotificationChannelの作成

ローカルプッシュ通知用のNotificationChannelを作成します。

これは、エンキューするまでには実行しておいた方が良いでしょう。

これで完了です。

プッシュ通知が表示されました。

さいごに

iOS は割と簡単に実装できるローカルプッシュ通知ですが、Androidでは全く異なる概念であることが分かりました。

バックグラウンドの実行制限も受けるため、ローカルプッシュ実装時にはその辺りの制約にも気をつけたいですね。

おすすめ書籍

Kotlinスタートブック -新しいAndroidプログラミング Kotlinイン・アクション 速習 Kotlin: Javaより簡単!新Android開発言語を今すぐマスター 速習シリーズ

page_footer_300rect




page_footer_300rect




-Android
-, , ,

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

Android CameraXプレビューを実装してみた

1 はじめに2 CameraXとは3 Android Jetpackについて4 Cameraパーミッションの追加5 ソースコード全容6 プレビューの実装7 さいごに8 おすすめ書籍 はじめに こんにち ...

Android JavaでS3への画像アップロード

1 はじめに2 AWS上での事前準備3 Android StudioのGradleでAWS SDKをインストール4 ManifestにPermissionの追加5 カメラで写真を撮影し、保存先のPat ...

【Kotlin】FirebaseAuthenticationでGoogle・Facebook連携する

1 はじめに2 Firebaseプロジェクトの設定3 build.gradleに追記4 Googleログイン5 Facebookログイン6 さいごに7 参考8 おすすめ書籍 はじめに はじめまして。m ...

Kotlinのスコープ関数を調べて見た

1 はじめに2 スコープ関数とは3 スコープ関数の種類について4 with関数4.1 使い方4.1.1 withを使わない場合4.1.2 withを使う場合4.2 所感5 apply関数5.1 使い方 ...

Kotlinでクラスのネストについて

1 はじめに2 クラスのネスト3 内部クラス3.1 Javaコードとの比較4 さいごに5 おすすめ書籍 はじめに こんにちは。引き続きKotlinの基本文法で、今回はクラスのネストについてです。 Ja ...

フォロー

follow us in feedly

page_side_300rect

2019年10月
« 9月 11月 »
 12345
6789101112
13141516171819
20212223242526
2728293031 

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。