投稿日:

Androidでのプッシュ通知の検討と実装メモ


お知らせなどのプッシュ通知の実装は、ユーザービリティなどを考慮すると、非常にセンシティブな要件項目です。情報を出したいお客様は、時に過度な情報送信を主張されますが、それがお客様の目的と合致するかというと、必ずしもそうではない…というか、私の経験上は、どちらかというと間違った選択であることが多いですね。ディレクションにおいてはお客様とよく相談し、お客様にプッシュ通知の利害をよく説明し、ご理解いただくこと、またご理解頂けるように説明する能力が、制作会社にも求められると思います。

さて、例えば目覚まし時計などのように、通知されること自体が、ユーザーがアプリケーションに求める主たる機能である場合を除いては、コントローラブル(ON/OFF可能)であること、かつ「あまりうるさく無い」こと、といったあたりが良い落としどころのようです。

今回は、先日制作したアプリケーションについて、その仕様検討・実装のメモを残しておきます。

通知仕様の検討

アプリケーションの概要

まず、アプリケーションの要件は次のような感じでした。

  • 定期的に電力会社の情報をチェックする
  • 電力不足になると、ユーザーに通知する

アプリケーションの目的は、「節電」です。ユーザーはアプリケーションをインストールすることで、節電の為の行動を促される仕組みを持っています。通知は、電力不足の傾向が高まった時にそれをユーザーに知らせて、さらなる節電を促すものです。

ユーザー特性

今回、ユーザーには次のような特性があると推定しました。

  • 能動的に節電に取り組む意思がある
  • ある程度頻繁な通知も、許容される可能性が高い
  • 通知はなるべくタイムリーに欲しいと考えている
  • 電池消費の多いアプリは困る
  • 過度な通知を嫌う

検討

これをもとに、次のような検討をしました。
  • どんなふうに通知するか? 画面表示だけで良いか?
    …音声やバイブレーションでの通知は過剰ではないか?
  • 画面表示だけの通知なら、お知らせは画面ONの時だけで良くないか?
    …OFFの時はどっちみち見えないし
  • じゃ逆に、画面OFFの時は、電力チェックしなくて良い
    …電池節約できる
  • 最低チェック間隔は必要か?
    …頻繁に画面ON/OFFする人もいると思われる
  • 電源つないでデスクトップに置いてる人もいるよね?
    …画面ONの時だけじゃしばらくお知らせ出ないから、画面ON時は定期的なポーリングが必要
  • 通知のON/OFFは必須

決定された仕様

以上から、結果的に以下の通知仕様とすることになりました。

  • 通知方法
    • Notificationで表示する
    • 音やバイブレーションでの通知はしない
    • 次回の電力チェックで通知要件が無くなったらNotificationをキャンセルする
  • 電力チェックのタイミング
    • スクリーンON時、電力チェックする
    • 最低チェック間隔を設けて、過度な電力チェックをスキップ
    • スクリーンON中、定期的にポーリングして、電力チェックする
    • ポーリング間隔は、電力会社の情報更新間隔と合わせる

実装メモ

今回は上記の仕様を満たす為に、以下のような実装を行いました。

  • BroadcastReceiver
    • android.intent.action.SCREEN_ON
      1. bindService して、サービスの checkAndNotify() でチェックして必要なら通知
      2. Alarmで次回の定期チェックをセット
    • android.intent.action.SCREEN_OFF
      1. Alarmをクリア
    • android.intent.action.BOOT_COMPLETED
    • android.intent.action.PACKAGE_CHANGED
      1. SCREEN_ON/OFF 用の IntentFilter を登録(これらは動的にしか登録できないから)
  • Service
    • checkAndNotify
      1. 前回チェック時間を確認、最低チェック間隔を超えていたら:
        1. 別 Thread でチェック~必要なら通知
      2. 前回チェック時間として現在時間を保存(Preference)

 

 

 

コメントを残す