はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】Unity公式のパッケージでAndroidのプッシュ通知(ローカル)を実装してみた

バージョン unity2018.3.9f1

はじめに

今回はローカルのプッシュ通知を実装してみる記事になります!

プッシュ通知と聞くと、firabaseなどが必要だと思っている人もいるのではないのでしょうか。

私も最近知ったのですが、こういったサーバーを必要とする通知はリモート通知というらしく、サーバーが必要ないローカル通知もあるみたいです。

サーバーが必要ないなら一気にハードルが下がった感じがします。

またそれに加えて、Unity公式でローカル通知のパッケージがPackage Managerからダウンロードできるみたいです。

実際にそれを使ってみたいと思います!

Mobile Notificationsをダウンロードする

Mobile Notificationsというパッケージを使います。

まずはPackage Managerを開きましょう。

f:id:hanaaaaaachiru:20190501232131p:plain

まだPreview版なので、やや見つけづらいかもしれませんがMobile Notificationsを見つけてインポートします。

f:id:hanaaaaaachiru:20190501232251p:plain

通知チャンネルを作る

プッシュ通知をするにあたって通知チャンネルは必須です。

通知チャンネルとは”通知項目を制御できるようにするAndroid 8.0で導入された通知のしくみ”だそうです。
「通知チャンネル」ってなんですか? - いまさら聞けないAndroidのなぜ | マイナビニュース

簡単にいうとAndroidの設定画面から見られる通知の設定のところでしょうか。

こちらの記事も分かりやすく解説されていました。
OreoでNotificationを表示させる方法 - Qiita

これをスクリプトから作成します。

using System;
using Unity.Notifications.Android;    //ここを忘れずにする
using UnityEngine;

public class NotificationsManager : MonoBehaviour
{
    private string _channelId = "【ここにチャンネル ID】";

    private void Awake()
    {
        var channel = new AndroidNotificationChannel
        {
            Id = _channelId,
            Name ="【ここにチャンネル名】",
            Importance = Importance.High,
            Description = "【ここに説明文】",
        };
        AndroidNotificationCenter.RegisterNotificationChannel(channel);

    }

ここでのチャンネル名と説明文はAndroidの設定から見ることができます。ただ逆にチャンネルIDは見られないので、適当な文字列でたぶん大丈夫です。

またImportance通知の重要度を表していて、おそらく見た目に関する項目でしょう。None,Low,High,Defaultの4種類がありましたが、公式のサンプルではHighでしたので今回は同様にしたいと思います。

通知を送る

実際に簡単な通知を送ってみましょう。

using System;
using Unity.Notifications.Android;
using UnityEngine;

public class NotificationsManager : MonoBehaviour
{
    private string _channelId = "【ここにチャンネル ID】";

    private void Awake()
    {
        var channel = new AndroidNotificationChannel
        {
            Id = _channelId,
            Name = "【ここにチャンネル名】",
            Importance = Importance.High,
            Description ="【ここに説明文】",
        };
        AndroidNotificationCenter.RegisterNotificationChannel(channel);

    }

    /// <summary>
    /// 通知を送信する
    /// </summary>
    public void SendNotification()
    {
        var notification = new AndroidNotification
        {
            Title = "【ここにタイトル】",
            Text = "【ここにテキスト】",
            SmallIcon = "icon_0",
            LargeIcon = "icon_1",
            FireTime = DateTime.Now.AddSeconds(5),
        };
        AndroidNotificationCenter.SendNotification(notification, _channelId);
    }
}

ここでのSmallIconLargeIconの文字列はサンプルの通りの名前で大丈夫です。
これはUnityのEditor画面から指定した名前の画像を指定できます。

また、画像を指定しなかった場合はUnityのデフォルトの画像が通知に表示されるようです。

画像を指定する

指定したい画像のRead/Write Enabledをオンにします。

f:id:hanaaaaaachiru:20190502000153p:plain

Project -> Editor -> com.unity.mobile.notifications ->NotificationSettingsをクリックしてインスペクターから設定しましょう。

f:id:hanaaaaaachiru:20190501234728p:plain

なぜか私の画面が盛大にバグっていたのですが、一応設定はできました。

再起動したときに削除されないようにする

デフォルトでは、スケジュールされた通知はデバイスの再起動時に削除されるみたいです。
これを回避するためにはEdit->Project Settings->Mobile Notification SettingsからReschedule Notifications on Device RestartをオンにすればOKです。

f:id:hanaaaaaachiru:20190502000814p:plain

さいごに

これでとりあえずの通知をするところまでできました。
是非上手く活用してみてください!