スタッフブログ

STAFF BLOG

アプリ開発日誌

2016.07.20

【Android】通知をカスタマイズしよう!

どうも、アンドロイド開発担当ワタナベです。

アプリの要件として、アプリがバックグラウンドにあったり、起動していない時にユーザーにリマインドしたい情報やお知らせ通知があることもあるでしょう。Android端末ではそういった要望を叶えるために、[Notification]という機能を使用して実装し、通知を行います。サーバーからのプッシュ通知の表示で、見かけたことがあると思いますが、プッシュ通知以外でも起動時にバックグラウンドで実行する処理を行い、時間が経ったら通知させる、といったことも可能です。目覚ましなどはこの機能をしていると思われます。そんな通知の仕方を工夫することでユーザーがアプリを使う機会を増やすことができるでしょう。

今回はそんな便利な通知をただ表示するだけではなく、スタイルやイベント、バイブレーションやサウンドをといったカスタマイズをしてみましょう。(今回のサンプルアプリはGithubにプッシュしていますのでよろしければどうぞ)

一般的な通知方法

まずは一般的な通知の実装方法です。

スクリーンショット 2016-07-20 19.44.18

private void normalNotification() {
    NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext);
    builder.setSmallIcon(R.mipmap.ic_launcher);
    builder.setContentTitle("タイトル");
    builder.setContentText("内容");
    builder.setContentInfo("情報欄");
    builder.setTicker("通知概要");
    NotificationManager manager =
            (NotificationManager) getSystemService(Service.NOTIFICATION_SERVICE);
    manager.notify(0, builder.build());
}

大きなアイコンで表示する

スクリーンショット 2016-07-20 19.44.36

    private void bigIconNotification() {
        NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext);
        builder.setSmallIcon(R.mipmap.ic_launcher);
        builder.setContentTitle("大きいアイコンで通知");
        // 大きいアイコンを表示するためにBitmapを設定する
        Bitmap bigIcon = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
        builder.setLargeIcon(bigIcon);
        NotificationManager manager = (NotificationManager)
                getSystemService(Service.NOTIFICATION_SERVICE);
        manager.notify(0, builder.build());
    }

タップしてアプリを起動する

通知をタップしてアプリを起動することができるとよりユーザーにとって使い勝手のいいアプリとなります。タップを契機のアプリを起動したい場合の実装方法です。

private void launcherAppNotification() {
    NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext);
    builder.setSmallIcon(R.mipmap.ic_launcher);
    builder.setContentTitle("タップでアプリを起動する");

    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(
            mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    builder.setContentIntent(pendingIntent);
    builder.setAutoCancel(true);
    NotificationManager manager = (NotificationManager)
            getSystemService(Service.NOTIFICATION_SERVICE);
    manager.notify(0, builder.build());
}

通知オプションを設定する

通知する際にバイブレーションやOSデフォルトのサウンドを鳴らしたい場合の実装方法です。

private void setDefaultsNotification(EnNotification notification) {
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
    builder.setSmallIcon(R.mipmap.ic_launcher);
    switch (notification) {
        case VIBRATION:
            builder.setContentTitle("VIBRATION");
            builder.setDefaults(Notification.DEFAULT_VIBRATE);
            break;
        case SOUND:
            builder.setContentTitle("SOUND");
            builder.setDefaults(Notification.DEFAULT_SOUND);
            break;
        case ALL:
            builder.setContentTitle("ALL");
            builder.setDefaults(Notification.DEFAULT_ALL);
            break;
    }
    builder.setWhen(System.currentTimeMillis());
    NotificationManager manager = (NotificationManager)
            getSystemService(Service.NOTIFICATION_SERVICE);
    manager.notify(0, builder.build());
}

 スタイルを設定する

表示領域に余裕がある場合はスタイルを設定することで通知を目立たせることができます。しかし、主張の強い通知はユーザーに嫌われることもありますので、そのスタイルがアプリの機能にマッチしているか検討することをお勧めします。PictureStyleでは写真を主に扱うアプリで用いられているのを見かけますね。

スクリーンショット 2016-07-20 19.45.10 スクリーンショット 2016-07-20 19.45.24

private void bigTextStyleNotification() {
    NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext);
    builder.setSmallIcon(R.mipmap.ic_launcher);
    // スタイル設定
    NotificationCompat.BigTextStyle bigTextStyle =
            new NotificationCompat.BigTextStyle(builder);
    bigTextStyle.setBigContentTitle("BigTextStyle");
    bigTextStyle.bigText("コンテンツサンプルコンテンツサンプル");
    bigTextStyle.setSummaryText("通知サマリテキスト");

    NotificationManager manager = (NotificationManager)
            getSystemService(Service.NOTIFICATION_SERVICE);
    manager.notify(0, builder.build());
}

private void pictureStyleNotification() {
    NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext);
    builder.setSmallIcon(R.mipmap.ic_launcher);
    // スタイル設定
    NotificationCompat.BigPictureStyle bigPictureStyle =
            new NotificationCompat.BigPictureStyle(builder);
    Bitmap largePicture = BitmapFactory.decodeResource(
            getResources(), R.mipmap.ic_launcher);
    bigPictureStyle.bigPicture(largePicture);
    bigPictureStyle.setBigContentTitle("BigPictureStyle");
    bigPictureStyle.setSummaryText("通知サマリテキスト");

    NotificationManager manager = (NotificationManager)
            getSystemService(Service.NOTIFICATION_SERVICE);
    manager.notify(0, builder.build());
}

まとめ

今回はNotificationの機能を使って通知をカスタマイズする方法をまとめました。

通知はユーザーがアプリを使う機会を増やすので、要件に含まれることがとても多い機能です。

通知はユーザーの注意を奪いますが、適切な頻度を見誤るとストレスを与えてしまい、最悪の場合アプリがアンインストールされる原因にもなります。ユーザーの心理をよく読み、用法用量正しく通知しましょう。

BACK

お問合せ

イーディーエーに興味をお持ちいただいて
ありがとうございます!
スマホアプリに関するご相談、
お見積りや弊社へのご質問など、
お気軽にお問い合わせください。
担当者より折り返しご連絡させていただきます。

    お名前必須
    会社名
    メールアドレス必須
    電話番号必須
    お問合わせ種別必須
    お問合わせ内容必須

    アンケートにご協力ください。
    弊社サイトへはどのようにしてアクセスされましたか?

    個人情報のお取扱いに関する同意事項

    1.事業者の氏名又は名称

    株式会社イーディーエー

    2.個人情報保護管理者の氏名又は職名、所属及び連絡先

    個人情報保護管理者 小宮 保人
    Mail:[email protected]

    3.取得した個人情報の利用目的

    当フォームで取得した個人情報は、お問い合わせに関する回答のために利用し、目的外利用はいたしません。

    4.弊社が取得した個人情報の第三者への委託、提供について

    弊社は、ご本人に関する情報をご本人の同意なしに第三者に委託または提供することはありません。

    5.個人情報保護のための安全管理

    弊社は、ご本人の個人情報を保護するための規程類を定め、従業者全員に周知・徹底と啓発・教育を図るとともに、その遵守状況の監査を定期的に実施いたします。
    また、ご本人の個人情報を保護するために必要な安全管理措置の維持・向上に努めてまいります。

    6.個人情報の開示・訂正・利用停止等の手続

    ご本人が、弊社が保有するご自身の個人情報の、利用目的の通知、開示、内容の訂正、追加又は削除、利用の停止、消去及び第三者への提供の停止を求める場合には、下記に連絡を頂くことで、対応致します。

    株式会社イーディーエー 個人情報お問合せ窓口
    〒106-0032 東京都港区六本木7丁目14番23 ラウンドクロス六本木4F
    TEL:03-5422-7524 FAX:03-5422-7534
    Mail:[email protected]

    7.ご提供いただく情報の任意性

    個人情報のご提供は任意ですが、同意を頂けない場合には、第3項にあります利用目的が達成できない事をご了承いただくこととなります。

    8.弊社Webサイトの運営について

    弊社サイトでは、ご本人が弊社Webサイトを再度訪問されたときなどに、より便利に閲覧して頂けるよう「クッキー(Cookie)」という技術を使用することがあります。これは、ご本人のコンピュータが弊社Webサイトのどのページに訪れたかを記録しますが、ご本人が弊社Webサイトにおいてご自身の個人情報を入力されない限りご本人ご自身を特定、識別することはできません。
    クッキーの使用を希望されない場合は、ご本人のブラウザの設定を変更することにより、クッキーの使用を拒否することができます。その場合、一部または全部のサービスがご利用できなくなることがあります。