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開発言語を今すぐマスター 速習シリーズ

blog-page_footer_336




blog-page_footer_336




-Android
-, , ,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

Kotlinをはじめよう〜コレクションなど〜

1 はじめに2 配列3 レンジ4 コレクション(リスト)5 コレクション(セット)6 コレクション(マップ)7 コレクションまとめ8 さいごに9 おすすめ書籍 はじめに 前回のKotlin基本文法編に ...

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

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

SafetyNet Attestation APIでRoot化チェック【基本的な検証編】

1 はじめに2 SafetyNet Attestation APIとは2.1 注意点2.1.1 レスポンス結果はアプリ内で判定しない2.1.2 JWSのキーチェーンをチェックする2.1.3 レスポンス ...

【Java】ストリームについてまとめてみました

1 はじめに2 Streamの分類3 テキストファイルの読み書き4 バイナリファイルの読み書き5 読み書きのバッファリング処理6 さいごに7 おすすめ書籍 はじめに Javaではすべての入出力をストリ ...

GoogleMap Clusterのカスタマイズ

1 はじめに2 クラスタ内のアイテムクラス3 クラスタをレンダリングするクラス4 クラスタの色を設定する5 クラスタ化の最小個数を設定する6 クラスタのクリックイベントを拾う7 さいごに はじめに 最 ...

フォロー

blog-page_side_responsive

2019年10月
 12345
6789101112
13141516171819
20212223242526
2728293031  

アプリ情報

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