渋谷ほととぎす通信

新しいこと、枯れたこと問わず大庭が興味を持ったものを調査、生活の効率を求める完全趣味の技術ブログ。基礎を大事にしています。

Unity製Mobile Notificationsで無料でローカルPush通知を実装する


f:id:esakun:20190204205721p:plain:w450

Unity製のモバイル端末向けローカルPush通知パッケージMobile Notificationsというものを試しました。

必須要件

  • Android 4.1以降
  • iOS 10以降

検証してみたところ、Android7.1端末、8.0端末、iOS12のiPhone6sで動作確認は取っています。現在Preview版とのことですが、とりあえず動いてはいます。


使い方は簡単で、Pluginsフォルダを汚すことなく各プラットフォームごとの処理をC#コードを書いていくだけです。

Android版の対応

比較的、実機確認までが容易なAndroidから説明していきます。
Mobile NotificationsをインストールするとProject SettingsMobile Notification Settingsという項目が追加されます。各プラットフォームのタブがあるので、Androidを選びます。 f:id:esakun:20190205124059p:plain:w450

Androidは通知アイコン設定のみで、非常にシンプルです。

項目 内容 備考
Identifier アイコンID 重複してもエラーにならないので注意
Type 種類(small or large) smallの場合はアルファ抜き白になる

f:id:esakun:20190205124852p:plain:w450
ヘッダに表示されるアイコンが、TypeがSmalle Iconです。

f:id:esakun:20190205122703p:plain:w450

f:id:esakun:20190205122727p:plain:w450

このように通知されます。この通知UIをタップするとアプリが立ち上がります。

  1. 通知チャンネルを登録
  2. 通知を予約する

通知によってアイコン、文章を変更することができます。
アイコンは予めアプリに埋め込んでおく必要がありそうですが、文言はマスターに登録しておくなどすれば自由に変更することが可能です。

抜粋コードですが、以下のような実装になります。

通知チャンネルを登録

AndroidNotificationCenter.RegisterNotificationChannel(new AndroidNotificationChannel
{
    Id = ChannelId,
    Name = "Default ChannelName",
    Importance = Importance.High,
    Description = "Channel Description",
});

通知を予約する

AndroidNotificationCenter.SendNotification(new AndroidNotification
{
    Title = title,
    Text = body,
    SmallIcon = "icon_0",
    LargeIcon = "icon_1",
    FireTime = System.DateTime.Now.AddSeconds(afterSec),
    Number = 1
}, ChannelId);

どちらもAndroidNotificationCenterクラスを通して処理を書きます。
ちなみに、通知音を変更することは現状できません。アップデートに期待です。

通知アイコンが出ない問題

Number = 1と設定しているが通知アイコン(アプリアイコン付く番号アイコン)が表示されない問題に出くわしております。どなたか解決方法知りませんかね...?

iOS版の対応

※本記事ではCoreLocation frameworkについては言及しません。あくまで時間をトリガーに通知させます。

f:id:esakun:20190205175139p:plain:w450
iOSはAndroidと違ってまあまあ設定項目がありますが、今回はアプリ起動時に通知許可を確認するのでRequest Authorization on App Launchにチェックを入れます。ローカル Push通知だけであれば、これ以上特に設定する項目はありません。

f:id:esakun:20190205173037p:plain:w450
※このようにアプリ初回起動直後に通知の許可確認ポップアップが表示されます。

Android版との違い

  • 通知許可ポップアップを任意のタイミングで出せる(Androidはそもそも不要)
  • Push通知アイコンは動的変更不可
  • 実機で確認するためにはApple Developer Programが必要
iOSNotificationCenter.ScheduleNotification(new iOSNotification()
{
    Title = title,
    Body = body,
    ShowInForeground = true,
    Badge = 1,
    Trigger = new iOSNotificationTimeIntervalTrigger()
    {
        TimeInterval = new System.TimeSpan(0, 0, afterSec),
        Repeats = false
    }
});

通知ポップアップが許可されれば、上記のようなコードを実行するだけで通知は予約されます。

スリープ時通知 アクティブ時通知 通知アイコン
f:id:esakun:20190205173216p:plain:w160 f:id:esakun:20190205173246p:plain:w160 f:id:esakun:20190205173234p:plain:w160

このような感じにC#を書くだけで通知してくれます。

通知アイコン消せない問題

f:id:esakun:20190205180513p:plain:w100

Androidに引き続きiOSでも1点問題が発生しまして、通知をタップしたら通知アイコンも消えるのかなって思っていたらですね、消えません...。
この件に関しては、また別途検証しようと思います。

※解決しました↓↓

まとめ

ネイティブプラグインを扱うことなく、C#のみでローカルプッシュ通知を実装できました。
また Unityが公式でサポートしているという点が心強いです。
早くPreviewが取れてもらいたいものです。Unity2019のどこかですかね。。。?

今回のサンプルのフルソースは以下です。
通知をキャンセルしたり、他にもいろいろやりたい場合は、このままではできませんが、ただ、動くことを確認するくらいなら問題ないかと思います。

// 10秒後に通知
LocalNotificationWrapper. ReserveNotification("タイトル", "本文", 10);

こんな感じで使います。

以上です。

環境

  • Unity2018.3.2f1
  • Mobile Notifications 1.0.0 preview

参考